У меня есть столбец 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.
Как присвоить значения набора данных сетке? Пожалуйста помоги.
Ответ 1 · рейтинг 1 · Praveen Nambiar
Я думаю, вы пропустили DataBinding до GridView:
int i=0;
ds = new DataSet();
ds = db.getDetailRecords(Convert.ToInt32(txtBillNo.Text));
grdData.DataSource = ds.Tables[0]; // you skipped this
Ответ 2 · рейтинг 1 · Conrad Clark
Создана ли таблица набора данных с этими двумя столбцами "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 в вашем источнике данных.
Ответ 4 · ravindra
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.
Автогенерируемый столбец должен быть ложным;