我有一个类型为datagridviewtextbox列的gridview。
它有以下字段。
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.
如何将数据集值分配给网格? 请帮忙。
答案 0 :(得分:1)
使用这两列“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列。
答案 1 :(得分:1)
我猜你跳过DataBinding
到GridView
:
int i=0;
ds = new DataSet();
ds = db.getDetailRecords(Convert.ToInt32(txtBillNo.Text));
grdData.DataSource = ds.Tables[0]; // you skipped this
答案 2 :(得分:0)
试用此代码:
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"]);
}
答案 3 :(得分:0)
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开始。
自动生成的列应为false;