才用的是Oracle表, 表名:PIC_USER ,表中只有两个字段,即 USERNAME(是主键) 和PASSWORD 。
我在DataGrid中加了《编辑》 和 《删除》两个模板列(即:col[0]为编辑,col[1]为删除,col[2]为USERNAME,col[3]为PASSWORD )。事件处理代码如下:
private void Datagrid2_UpdateCommand(object source, DataGridCommandEventArgs e)
{
oracleConnection1.Open();
string key = Datagrid2.DataKeys[e.Item.ItemIndex].ToString();
string UserName;
string Password;
TextBox tb;
tb = (TextBox)e.Item.Cells[2].Controls[0];
UserName = tb.Text;
tb = (TextBox)e.Item.Cells[3].Controls[0];
Password = tb.Text;
DataSet1.PIC_USERRow r = dataSet11.PIC_USER.FindByUSERNAME(key);
r.USERNAME = UserName;
r.PASSWORD = Password;
oracleDataAdapter1.Update(dataSet11,"PIC_USER");
oracleDataAdapter1.Fill(dataSet11);
Datagrid2.EditItemIndex=-1;
Datagrid2.DataBind();
oracleConnection1.Close();
Datagrid2.Columns[0].HeaderText="已更新";
}
数据修改完后点击更新就出现《指定的转换无效》的错误。
出错行是:tb = (TextBox)e.Item.Cells[2].Controls[0]; 请大侠们分析一下出错原因,并指出解决方法,万分感谢!
我在DataGrid中加了《编辑》 和 《删除》两个模板列(即:col[0]为编辑,col[1]为删除,col[2]为USERNAME,col[3]为PASSWORD )。事件处理代码如下:
private void Datagrid2_UpdateCommand(object source, DataGridCommandEventArgs e)
{
oracleConnection1.Open();
string key = Datagrid2.DataKeys[e.Item.ItemIndex].ToString();
string UserName;
string Password;
TextBox tb;
tb = (TextBox)e.Item.Cells[2].Controls[0];
UserName = tb.Text;
tb = (TextBox)e.Item.Cells[3].Controls[0];
Password = tb.Text;
DataSet1.PIC_USERRow r = dataSet11.PIC_USER.FindByUSERNAME(key);
r.USERNAME = UserName;
r.PASSWORD = Password;
oracleDataAdapter1.Update(dataSet11,"PIC_USER");
oracleDataAdapter1.Fill(dataSet11);
Datagrid2.EditItemIndex=-1;
Datagrid2.DataBind();
oracleConnection1.Close();
Datagrid2.Columns[0].HeaderText="已更新";
}
数据修改完后点击更新就出现《指定的转换无效》的错误。
出错行是:tb = (TextBox)e.Item.Cells[2].Controls[0]; 请大侠们分析一下出错原因,并指出解决方法,万分感谢!
TextBox txt = (TextBox)DataGrid1.Items[1].FindControl("txtID");
个人估计HeaderText可能改不起来搂住可以在前台页面里定义一个<div id="update" runat="server" />
然后Datagrid2.Columns[0].HeaderText="已更新";
改为update.Text =" 已更新";
这样就可以了
tb = (TextBox)e.Item.Cells[2].Controls[0];—>
tb = (TextBox)(e.Item.Cells[2].Controls[0]);
试了还是那样。
tb = (TextBox)e.Item.findcontrol("编辑用户名的编辑框的ID");
UserName = tb.Text;
tb = (TextBox)e.Item.findcontrol("编辑密码的编辑框的ID");
Password = tb.Text;
如果datagrid中textbox定义都没有id的话,用findcontrol也是白搭!!
<asp:TextBox runat="server" Text='<%# DataBinder.EvalContainer, "DataItem.USERNAME") %>'>
<asp:TextBox runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.PASSWORD") %>'>
如果没有ID就添加一个,如果使用索引访问你不能确定Controls[0]一定是TextBox可能是一个Literl,除非使用遍历Controls集合的方式找到类型为TextBox的控件再做转换使用,不过这个不如你添加一个ID简单!
<asp:TextBox runat="server" ID="tb1" Text='<%# DataBinder.Eval(Container, "DataItem.USERNAME") %>'>
<asp:TextBox runat="server" ID="tb2" Text='<%# DataBinder.Eval(Container, "DataItem.PASSWORD") %>'>
然后在事件处理程序里采用了FindControl, 如:
tb = (TextBox)e.Item.FindControl("tb1");
UserName = tb.Text;
tb = (TextBox)e.Item.FindControl("tb2");
Password= tb.Text;
之后不出错,但数据没有更新上,数据还是保持原样,这是怎么回事?