Как присвоить значение столбцу datagridviewtextbox в коде?

У меня есть столбец gridview типа datagridviewtextbox.

Он имеет следующие поля.

SrNo.    | Description    | HSN Code    | Qty   | Rate   | Amount 

Я получил записи «Описание», «Код HSN», «Количество» и «Ставка» в наборе данных.

Я хочу сгенерировать "SrNo" и "Amount" в своей программе.

Мой код:

int i=0;
ds = new DataSet();
ds = db.getDetailRecords(Convert.ToInt32(txtBillNo.Text));


for (i = 0; i < ds.Tables[0].Rows.Count; i++)
{
     grdData.Rows[i].Cells[0].Value = i;
     grdData.Rows[i].Cells[1].Value = ds.Tables[0].Rows[i]["Description"].ToString();
     grdData.Rows[i].Cells[2].Value = ds.Tables[0].Rows[i]["HSNCode"].ToString();
     grdData.Rows[i].Cells[3].Value = ds.Tables[0].Rows[i]["Qty"].ToString();
     grdData.Rows[i].Cells[4].Value = ds.Tables[0].Rows[i]["Rate"].ToString();
     grdData.Rows[i].Cells[5].Value = Convert.ToDouble(ds.Tables[0].Rows[i]["Qty"]) * Convert.ToDouble(ds.Tables[0].Rows[i]["Rate"]);                        
}

Но это не работает. Выдает ошибку, что Index was out of Range.

Как присвоить значения набора данных сетке? Пожалуйста помоги.


person Mohemmad K    schedule 09.04.2013    source источник
comment
Хорошо ли вы определили столбцы в datagridview ? тогда вам придется добавить к нему строку, потому что в сетке не будет строк (я предполагаю, что вы ничего не привязываете к сетке), например grdData.Rows.Add()   -  person V4Vendetta    schedule 09.04.2013
comment
Да, столбцы сетки определены ранее. Я не знаю, как работать с добавлением новой строки? Не могли бы вы предоставить код? @V4Vendetta   -  person Mohemmad K    schedule 09.04.2013
comment
Пожалуйста, покажите больше кода, код, как вы инициализировали представление сетки ??   -  person Dolo    schedule 09.04.2013


Ответы (4)


Я думаю, вы пропустили DataBinding до GridView:

int i=0;
ds = new DataSet();
ds = db.getDetailRecords(Convert.ToInt32(txtBillNo.Text));
grdData.DataSource = ds.Tables[0]; // you skipped this
person Praveen Nambiar    schedule 09.04.2013
comment
Спасибо, сэр, данные отображаются правильно.. Но возникла одна проблема, что столбцы отображаются дважды. @Правин Намбияр - person Mohemmad K; 09.04.2013
comment
Также отображаются предопределенные столбцы сетки, а также столбцы из набора данных. - person Mohemmad K; 09.04.2013
comment
Установить AutoGenerateColumns="false" - person Praveen Nambiar; 09.04.2013
comment
Как всегда все работает отлично... Большое спасибо, сэр. @Правин Намбияр - person Mohemmad K; 09.04.2013
comment
Сэр, мне нужна еще помощь. См. мой [Вопрос][stackoverflow.com/questions/15918309/ @Praveen Nambiar - person Mohemmad K; 10.04.2013

Создана ли таблица набора данных с этими двумя столбцами «SrNo» и «Amount»?

Если нет, то это причина, по которой вы получаете это исключение. Я знаю, что вы хотите генерировать их на лету, но для доступа к таким полям они должны как минимум присутствовать в таблице набора данных, а именно ds.Tables[0].

Убедитесь, что db.getDetailRecords возвращает действительное DataSet для столбцов, которые вы запрашиваете.

Да, плюс в datagridview нет строк. Я предлагаю вам привязать его к вашему набору данных, прежде чем что-либо менять, вы можете сделать это, установив свойство DataGridView DataSource.

int i=0;
ds = new DataSet();
ds = db.getDetailRecords(Convert.ToInt32(txtBillNo.Text));

//add this
grdData.DataSource = ds.Tables[0];

for (i = 0; i < ds.Tables[0].Rows.Count; i++)
{
     grdData.Rows[i].Cells[0].Value = i;
     //You don't need to set the other properties, they were binded when you put the DataSource in there
     grdData.Rows[i].Cells[5].Value = Convert.ToDouble(ds.Tables[0].Rows[i]["Qty"]) * Convert.ToDouble(ds.Tables[0].Rows[i]["Rate"]);                        
}

Убедитесь, что SrNo и Amount являются соответственно столбцами 0 и 5 в вашем источнике данных.

person Conrad Clark    schedule 09.04.2013
comment
Да, сэр, я проверил набор данных, и записи успешно возвращены. Но я не знаю, как работать со строкой представления сетки. @Conrad CLark - person Mohemmad K; 09.04.2013

Попробуйте этот код:

int i=0;
ds = new DataSet();
ds = db.getDetailRecords(Convert.ToInt32(txtBillNo.Text));

grdData.Rows.Clear()
for (i = 0; i < ds.Tables[0].Rows.Count; i++)
{
     grdData.Rows.Add(); /// For add a Row. then does not show index out of range error
     grdData.Rows[i].Cells[0].Value = i;
     grdData.Rows[i].Cells[1].Value = ds.Tables[0].Rows[i]["Description"].ToString();
     grdData.Rows[i].Cells[2].Value = ds.Tables[0].Rows[i]["HSNCode"].ToString();
     grdData.Rows[i].Cells[3].Value = ds.Tables[0].Rows[i]["Qty"].ToString();
     grdData.Rows[i].Cells[4].Value = ds.Tables[0].Rows[i]["Rate"].ToString();
     grdData.Rows[i].Cells[5].Value = Convert.ToDouble(ds.Tables[0].Rows[i]["Qty"]) * Convert.ToDouble(ds.Tables[0].Rows[i]["Rate"]);                        
}
person Sathish    schedule 09.04.2013
comment
Я не знаю, как создаются ячейки, когда вы добавляете новую строку таким образом. Может быть, это даст вам еще один Index was out of Range. из-за ячеек? - person Conrad Clark; 09.04.2013
comment
@ConradClark Как ты можешь так говорить? Это не даст OP никакой ошибки. - person Sathish; 09.04.2013

for (i = 0; i < ds.Tables[0].Rows.Count; i++)

use for that (i = 0; i == ds.Tables[0].Rows.Count; i++)
//  not show index out of range

Потому что dgv как индекс datagridview начинается с 0, а ds как набор данных также с 0.

Автогенерируемый столбец должен быть ложным;

person ravindra    schedule 21.06.2013