0

我有一个 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.

如何将数据集值分配给网格?请帮忙。

4

4 回答 4

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"]);                        
}

确保SrNoAmount分别是 DataSource 中的第 0 列和第 5 列。

于 2013-04-09T12:14:04.260 回答
1

我猜你跳过了DataBindingto GridView

int i=0;
ds = new DataSet();
ds = db.getDetailRecords(Convert.ToInt32(txtBillNo.Text));
grdData.DataSource = ds.Tables[0]; // you skipped this
于 2013-04-09T12:17:38.943 回答
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"]);                        
}
于 2013-04-09T12:24:16.227 回答
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

因为作为 datagridview 索引的 dgv 从 0 开始,作为数据集的 ds 也从 0 开始。

自动生成的列应该是假的;

于 2013-06-21T07:37:15.337 回答