注册 登录
编程论坛 ASP.NET技术论坛

DateGrid中模版列TextBox数据加不进去

yunj1105 发布于 2007-05-28 08:56, 1272 次点击

我在DateGrid中加了模版列
<asp:TemplateColumn HeaderText="成绩">
<ItemStyle Width="42px" />
<ItemTemplate>
<asp:TextBox ID="text" runat="server" Width="40px"></asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
下面是Button1的事件 怎么数据加不进去啊?而且也不报错,还会跳出提示框"输入成功!"
大家帮我看看哪出错了?
protected void Button1_Click(object sender, EventArgs e)
{
foreach (DataGridItem Item in DataGrid1.Items)
{
if (Item.ItemType == ListItemType.Item || Item.ItemType == ListItemType.AlternatingItem)
{
TextBox tet = (TextBox)Item.FindControl("text");

if (tet.Text != null)
{
string str_mark = "update lab_students set mark='" + int.Parse(tet.Text) + "' where user_ID='" + Item.Cells[1].ToString() + "'";
co_m.ENQ(str_mark);
}
}
}
Response.Write("<script defer>alert('输入成功!');</script>");
}

16 回复
#2
sdlklhd2007-05-28 09:08
是不是因为TextBox没有绑定数据啊
#3
bygg2007-05-28 09:15
你加个foreach 做什么?全部都更新??
#4
GrimFish2007-05-28 09:32

if (tet.Text != null)
{
string strDelId = DataGrid1.DataKeys[Item.RowIndex].Value.ToString();
string str_mark = "update lab_students set mark='" + int.Parse(tet.Text) + "' where user_ID='" + strDelId + "'";
co_m.ENQ(str_mark);
}

设置一个DATAKEYS就应该可以。

#5
yunj11052007-05-28 09:35
你终于来了
是啊 一开始数据表中的mark是空的
这个是要加成绩进去
#6
GrimFish2007-05-28 09:43
也可以把循环里的co_m.ENQ(str_mark);这句执行SQL先去掉,换成
Response.Write(str_mark);
看看输出的SQL语句到底正确不正确。
#7
guming2007-05-28 09:43
你把Response.Write("<script defer>alert('输入成功!');</script>")放在那,肯定会提示“输入成功”了,应该放在

if (tet.Text != null)
{
string str_mark = "update lab_students set mark='" + int.Parse(tet.Text) + "' where user_ID='" + Item.Cells[1].ToString() + "'";
co_m.ENQ(str_mark);
Response.Write("<script defer>alert('输入成功!');</script>");
}

#8
yunj11052007-05-28 09:51
恩 楼上的有道理 楼上的楼上的方法我去试试
#9
bygg2007-05-28 09:56
哦,你是想添加数据到数据库中啊..
但是你写的SQL语句却是string str_mark = "update lab_students set mark='" + int.Parse(tet.Text) + "' where user_ID='" + Item.Cells[1].ToString() + "'"; 这个是修改....
#10
yunj11052007-05-28 10:32
但是数据库是这样的
lab_students表
user_ID int (学号)
dept_ID int(所属院)
major_ID int(专业)
mark int(实验考试成绩)


#11
bygg2007-05-28 10:41
你要添加的话,也得写 insert into ..这样的语句啊..你那是写的修改语句.
#12
GrimFish2007-05-28 10:42

批量更新吗?

看样子学号应该是唯一值
设置为DATAKEY
如果做批量更新这样用
protected void Button1_Click(object sender, EventArgs e)
{
foreach (DataGridItem i in DataGrid1.Items)
{
TextBox txt = (TextBox)i.FindControl("TextBox2");
string text = txt.Text.ToString();
string strDelId = DataGrid1.DataKeys[i.RowIndex].Value.ToString();
if (txt.Text == null)
{
Response.Write("<script defer>alert('不能为空!');</script>");
}
else
{
string str_mark = "update lab_students set mark='" + text + "' where user_ID='" + strDelId + "'";
co_m.ENQ(str_mark);
Response.Write("<script defer>alert('输入成功!');</script>");
}
}

}

你试了看看吧,我不太记得datagrid的方法了,用2005习惯了,如果出错在贴出来

#13
yunj11052007-05-28 11:02
bygg:那insert不就把user_ID dept_ID major_ID也插入了吧?这些项数据库表里已经有了


GrimFish:string strDelId = DataGrid1.DataKeys[Item.RowIndex].Value.ToString();
红色部分应该这样写吗? Cell[1]
#14
GrimFish2007-05-28 11:10
不好意思,写成GridView的了。。。应该是

string strDelId = DataGrid1.DataKeys[i.ItemIndex].Value.ToString();


把下面放到你BUTTON的CLICK事件里看看
foreach (DataGridItem i in DataGrid1.Items)
{
TextBox txt = (TextBox)i.FindControl("TextBox2");
string text = txt.Text.ToString();
strstring strDelId = DataGrid1.DataKeys[i.ItemIndex].Value.ToString(); if (txt.Text == null)
{
Response.Write("<script defer>alert('不能为空!');</script>");
}
else
{
string str_mark = "update lab_students set mark='" + text + "' where user_ID='" + strDelId + "'";
co_m.ENQ(str_mark);
Response.Write("<script defer>alert('输入成功!');</script>");
}
}
#15
GrimFish2007-05-28 11:21
以下是引用yunj1105在2007-5-28 11:02:08的发言:
GrimFish:string strDelId = DataGrid1.DataKeys[Item.RowIndex].Value.ToString();
红色部分应该这样写吗? Cell[1]

为什么你老是想这样写呢,Cells[1]这已经把行的索引给固定了,而且更新根本就是错误的,只是行的索引,用来作为更新的条件,怎么可能是对的呢。

你该设置一个DataKey,在页面设计的DataGrid上右键,属性,找到DataKey,然后设置为学号,我这里设想学号是唯一值,把他当做主键吧。

你1楼的语法是正确的,仔细看了一下没有什么错误,但是没有更新是因为你的条件根本不成立,自然就不能更新数据。

那么只能借助DataKey来做为条件,用foreach来迭代,进行重复的UPDATE更新。

如果你固定了行。那么只是更新其中一行,其他的忽略,这样foreach还有意义么?

#16
yunj11052007-05-28 15:55

呵呵 搞定了 谢谢哦

#17
sdlklhd2007-05-29 07:47
1