怎样获取DataList模板里控件的值??????

DoubleFrost 2008-07-07 02:51:56
我用DataList绑定了数据,在模板里用TextBox绑定了值 可是获取不到TextBox控件里的值?

DataList dl = (DataList)FindControl("DataList1");
for (int i = 0; i < dl.Items.Count; i++)
{
TextBox txtfbsj = (TextBox)FindControl(dl.Items[i].UniqueID + "txtfbsj");
TextBox txtzldw = (TextBox)FindControl(dl.Items[i].UniqueID + "txtzldw");
TextBox txtzlr = (TextBox)FindControl(dl.Items[i].UniqueID + "txtzlr");
TextBox txtbzldw = (TextBox)FindControl(dl.Items[i].UniqueID + "txtbzldw");
TextBox txtbt = (TextBox)FindControl(dl.Items[i].UniqueID + "txtbt");
TextBox txtjbnr = (TextBox)FindControl(dl.Items[i].UniqueID + "txtjbnr");

SqlConnection con = SqlCon.GetSqlConnection();
SqlCommand cmd = new SqlCommand("update jh_zlxx set (zlxx_fbsj=@fbsj,zlxx_zldw=@zldw,zlxx_zlr=@zlr,zlxx_bzldw=@bzldw,zlxx_bt=@bt,zlxx_jbnr=@jbnr) where zlxx_xh=@xh", con);
cmd.Parameters.AddWithValue("@fbsj", txtfbsj.Text);
cmd.Parameters.AddWithValue("@zldw", txtzldw.Text);
cmd.Parameters.AddWithValue("@zlr", txtzlr.Text);
cmd.Parameters.AddWithValue("@bzldw", txtbzldw.Text);
cmd.Parameters.AddWithValue("@bt", txtbt.Text);
cmd.Parameters.AddWithValue("@jbnr", txtjbnr.Text);
cmd.Parameters.AddWithValue("@xh", Request.QueryString["ID"]);
con.Open();
cmd.ExecuteNonQuery();
Response.Write("指令信息修改成功!");
con.Close();
con.Open();
Response.Write("指令修改成功!");
con.Close();
}

执行后就报“未将对象引用设置到对象的实例”;说明值是空的啊?为什麽呢??
...全文
1812 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐乔巴 2008-07-07
  • 打赏
  • 举报
回复
既然是o(∩_∩)o,加个好友#(^_^)#~
好了 自己试验下!! 别偷懒。。
我下班了 呵呵 我在国外 要早点 ~~ 不会的问其他大虾吧~~
brooklyng60 2008-07-07
  • 打赏
  • 举报
回复
DataList dl = (DataList)FindControl("DataList1");
for (int i = 0; i < dl.Items.Count; i++)
{
TextBox txtfbsj = (TextBox)dl.Items[i].FindControl("txtfbsj");
TextBox txtzldw = (TextBox)dl.Items[i].FindControl("txtzldw");
TextBox txtzlr = (TextBox)dl.Items[i].FindControl("txtzlr");
TextBox txtbzldw = (TextBox)dl.Items[i].FindControl("txtbzldw");
TextBox txtbt = (TextBox)dl.Items[i].FindControl("txtbt");
TextBox txtjbnr = (TextBox)dl.Items[i].FindControl("txtjbnr");

SqlConnection con = SqlCon.GetSqlConnection();
SqlCommand cmd = new SqlCommand("update jh_zlxx set (zlxx_fbsj=@fbsj,zlxx_zldw=@zldw,zlxx_zlr=@zlr,zlxx_bzldw=@bzldw,zlxx_bt=@bt,zlxx_jbnr=@jbnr) where zlxx_xh=@xh", con);
cmd.Parameters.AddWithValue("@fbsj", txtfbsj.Text);
cmd.Parameters.AddWithValue("@zldw", txtzldw.Text);
cmd.Parameters.AddWithValue("@zlr", txtzlr.Text);
cmd.Parameters.AddWithValue("@bzldw", txtbzldw.Text);
cmd.Parameters.AddWithValue("@bt", txtbt.Text);
cmd.Parameters.AddWithValue("@jbnr", txtjbnr.Text);
cmd.Parameters.AddWithValue("@xh", Request.QueryString["ID"]);
con.Open();
cmd.ExecuteNonQuery();
Response.Write("指令信息修改成功!");
con.Close();
con.Open();
Response.Write("指令修改成功!");
con.Close();
}


DoubleFrost 2008-07-07
  • 打赏
  • 举报
回复
呵呵 o(∩_∩)o...
快乐乔巴 2008-07-07
  • 打赏
  • 举报
回复
!姐妹?>_<
DoubleFrost 2008-07-07
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 chopper7278 的回复:]
哎。。 兄弟 我也是自己那时候拼命自己钻研的出来的哎
虽然麻烦点。。 [/Quote]
呵呵~偶不是兄弟的啦!
crescens 2008-07-07
  • 打赏
  • 举报
回复
看楼主的写法很奇怪啊: DataList dl = (DataList)FindControl("DataList1");
直接DataList1就是那个控件,他还findcontrol一下,至少我是头一次看到这样用的
快乐乔巴 2008-07-07
  • 打赏
  • 举报
回复
哎。。 兄弟 我也是自己那时候拼命自己钻研的出来的哎
虽然麻烦点。。 好的方法我也不知道~~~ 能解决问题也不错的
要不,你自己再想想,毕竟自己多钻研下效果比较好哇~
DoubleFrost 2008-07-07
  • 打赏
  • 举报
回复
就是觉得好麻烦哦
快乐乔巴 2008-07-07
  • 打赏
  • 举报
回复
不知道我说明白没。。口才不太好。。
也许会有更好的方法~呵呵!  
快乐乔巴 2008-07-07
  • 打赏
  • 举报
回复
恩,现在你已经知道了更新了哪个ID了吧。有了那个ID不就可以直接在按钮Click下写,更新它。
现在是不是不知道怎么找这一条的纪录上的控件?
当你在创建好你的那些textbox控件后,打开画面纪录显示在画面后,此时ID与画面生成的已经不一样了,你是用UniqueID 属性(包含服务器控件命名容器的标识符)来找的吧。但是你也不知道哪一行的。
所以我是这么想的,服务器能给你控件ID修改过来,我们也可以。在你创建的时候就是DataBinding事件中:
把所有的控件ID更新下,此时相信你可以把这一条所有的控件都找出来吧,比如主建列名是teaID,那么在所有的控件名前加个标示,比如 text.ID = teaID + "teaMoney";这是为以后更新查找铺路!
然后在更新按钮Click中直接查找控件 DataList.Findcontrl(btn.CommandArgument + "teaMoney");
这样就可以找到这一条所有的控件,修改的值也就可以取出来,最后更新了。。

呵呵,貌似听起来挺麻烦。。。
自己试验下
aspnet30 2008-07-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chopper7278 的回复:]
C# codeDataList.FindControl("TextBox控件ID");


这样找
[/Quote]
DoubleFrost 2008-07-07
  • 打赏
  • 举报
回复
那这段代码是写在哪个事件里呢?

SqlConnection con = SqlCon.GetSqlConnection();
SqlCommand cmd = new SqlCommand("update jh_zlxx set (zlxx_fbsj=@fbsj,zlxx_zldw=@zldw,zlxx_zlr=@zlr,zlxx_bzldw=@bzldw,zlxx_bt=@bt,zlxx_jbnr=@jbnr) where zlxx_xh=@xh", con);
cmd.Parameters.AddWithValue("@fbsj", txtfbsj.Text);
cmd.Parameters.AddWithValue("@zldw", txtzldw.Text);
cmd.Parameters.AddWithValue("@zlr", txtzlr.Text);
cmd.Parameters.AddWithValue("@bzldw", txtbzldw.Text);
cmd.Parameters.AddWithValue("@bt", txtbt.Text);
cmd.Parameters.AddWithValue("@jbnr", txtjbnr.Text);
cmd.Parameters.AddWithValue("@xh", Request.QueryString["ID"]);
con.Open();
cmd.ExecuteNonQuery();
Response.Write("指令信息修改成功!");
con.Close();
con.Open();
Response.Write("指令修改成功!");
con.Close();

chenguang79 2008-07-07
  • 打赏
  • 举报
回复
我的是repeater的,楼主可以看一下,好相功能和楼主的一样
http://blog.csdn.net/chenguang79/archive/2008/07/04/2611575.aspx
希望对你有帮助
快乐乔巴 2008-07-07
  • 打赏
  • 举报
回复
22楼说的不错!人家要写在button里的话应该这样
你在html中找到这段,你在模版里放置buttond的地方
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" CommandArgument='<%# Eval("a") %>' />
红色的地方自己加。
Eval("a")中的a是列名,自己修改下你要更新的主健列名。
然后在Button事件中测试下,看看能不能取到相对应的值
protected void Button2_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
string a = btn.CommandArgument;
}

知道了选择了谁后面还不好办?直接更新它吧
DoubleFrost 2008-07-07
  • 打赏
  • 举报
回复
22楼的
那Button_Click事件里就不要写代码了吗?
chinaicm 2008-07-07
  • 打赏
  • 举报
回复
TextBox txtfbsj = (TextBox)FindControl(dl.Items[i].UniqueID + "txtfbsj");

这里可能有错误吧

TextBox txtfbsj = (TextBox)dl.Items[i].FindControl("txtfbsj");

一般我是习惯这么写。
大巧不工 2008-07-07
  • 打赏
  • 举报
回复
不需要。
button里有个CommandArgument这个属性。你在DataDist对应的ItemDataBound方法中
{
if (e.Row.DataItemIndex > -1)
{
((Button)e.Row.FindControl("Button1")).CommandArgument = ((Text)e.Row.FindControl("text1")).Text;
}
}

在ItemCommand方法中
{
String str = ((Button)e.Row.FindControl("Button1")).CommandArgument.ToString();
}

大体上是这样的。
DoubleFrost 2008-07-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yuanzh 的回复:]
你可以把提交的数据放在DataTable中,然后再在你定义的按钮里保存!!
protected void DataList1_ItemCreated(object sender, DataListItemEventArgs e)
{
e.Item.FindControl("TextBox控件ID");
//在这里更改DataTable
}
protected void Button2_Click(object sender, EventArgs e)
{
//在这里保存
}
[/Quote]
怎样更改DataTable啊?
DoubleFrost 2008-07-07
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 chopper7278 的回复:]
也就是说你想点一下按钮 这一条记录更新一下,而不是循环所有的全部更新?貌似你写的方法给人家印象就是一个单独的按钮,一点全部更新。。。
[/Quote]
我绑定的时候是根据Id来绑定的 所以只有一条数据 将TextBox文本框里值修改后点击提交按钮 就将这条新的数据更新到数据库
快乐乔巴 2008-07-07
  • 打赏
  • 举报
回复
楼主,把你想干什么说清楚点,是想点个按钮全部更新呢?还是点这条记录的按钮时就更新这条记录,其他不管
加载更多回复(18)

61,826

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧