希望人能解决一下,关于datagrid的再绑定问题。
alefs 2002-05-08 04:20:38 我遇到一个头疼的问题,已经两天了。
我将后台数据绑定到一个DATAGRID,其中我在DATAGRID中加入了许多TEXTBOX 和 dropdownlist控件,然后在WEB端让客户可以修改和选择选择数据。
我认为datagrid中的数据可以用MYDATASET = (DataSet)MyDataGrid.DataSource;得到,然后对dataset进行操作就可以了,但系统报错:“未将对象引用设置到对象的实例。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。”
这样我又自己生成了一个新的dataset,将datagrid中的数据一行行取到dataset中,确认无误,新的DATASET中的值对,同datagrid中一致。但我用:
MyDataGrid.DataSource = getDataFromGridToDataSet().Tables["Customers"].DefaultView;
MyDataGrid.DataBind();
重新绑定时,刚才的错误信息又出现了,我想问一下。 我的相关代码如下:
private DataSet getDataFromGridToDataSet()
{
DataSet myDataSet = new DataSet("myDataSet");
DataTable tCust = new DataTable("Customers");
DataColumn cCustID = new DataColumn("RemoveID", typeof(string));
DataColumn cCode = new DataColumn("cCode", typeof(string));
DataColumn cCustName = new DataColumn("CustName",typeof(string));
DataColumn cSl = new DataColumn("cSl",typeof(string));
DataColumn cUnit = new DataColumn("cUnit",typeof(string));
DataColumn cPrice = new DataColumn("cPrice",typeof(string));
DataColumn cPh = new DataColumn("cPh",typeof(string));
tCust.Columns.Add(cCustID);
tCust.Columns.Add(cCode);
tCust.Columns.Add(cCustName);
tCust.Columns.Add(cSl);
tCust.Columns.Add(cUnit);
tCust.Columns.Add(cPrice);
tCust.Columns.Add(cPh);
myDataSet.Tables.Add(tCust);
for (int i = 0; i < 8; i++)
{
CheckBox Cb= (CheckBox)MyDataGrid.Items[i].Cells[0].Controls[1];
TextBox TbCode = (TextBox)MyDataGrid.Items[i].Cells[1].Controls[1];
Label TbCN = (Label)MyDataGrid.Items[i].Cells[3].Controls[1];
TextBox Tbsl = (TextBox)MyDataGrid.Items[i].Cells[4].Controls[1];
DropDownList Tbunit = (DropDownList)MyDataGrid.Items[i].Cells[5].Controls[1];
DropDownList Tbprice = (DropDownList)MyDataGrid.Items[i].Cells[6].Controls[1];
TextBox Tbph = (TextBox)MyDataGrid.Items[i].Cells[7].Controls[1];
DataRow newRow1;
newRow1 = tCust.NewRow();
tCust.Rows.Add(newRow1);
if (Cb.Checked == true)
{
tCust.Rows[i][0] = "1";
}
else
{
tCust.Rows[i][0] = "0";
}
tCust.Rows[i][1] = TbCode.Text;
tCust.Rows[i][2] = TbCN.Text;
tCust.Rows[i][3] = Tbsl.Text;
tCust.Rows[i][4] = Tbunit.SelectedItem.Text;
tCust.Rows[i][5] = Tbprice.SelectedItem.Text;
tCust.Rows[i][6] = Tbph.Text;
}
return myDataSet;
}
private void Button2_Click(object sender, System.EventArgs e)
{
MyDataGrid.DataSource = getDataFromGridToDataSet().Tables["Customers"].DefaultView;
MyDataGrid.DataBind();
}