DataGrid的Update问题

magicbacon 2008-06-14 05:24:59
Protected Sub dgAppDet_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs)
MsgBox(CType(e.Item.Cells(1).Controls(0), TextBox).Text)
End Sub

如上所示代码中,我在文本框中明明写入了内容,为什么MsgBox还是显示空白呢?可能是什么原因造成的?
...全文
148 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
一品梅 2008-06-15
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 magicbacon 的回复:]
还是不行,问题是现在不光是取不到值,PostBack后TextBox里填写的值竟然不见了,刚才好像不是这样的,也许我记错了,那么怎么会这样呢?控件里填写的值在PostBack后不是会保留的吗?
[/Quote]
啥意思,这个命令是用户自定义事件,要写上更新语句的.
magicbacon 2008-06-15
  • 打赏
  • 举报
回复
还是不行,问题是现在不光是取不到值,PostBack后TextBox里填写的值竟然不见了,刚才好像不是这样的,也许我记错了,那么怎么会这样呢?控件里填写的值在PostBack后不是会保留的吗?
一品梅 2008-06-15
  • 打赏
  • 举报
回复
是不是外面少了个括号,刚刚看了msdn.
magicbacon 2008-06-15
  • 打赏
  • 举报
回复
提刑官兄,这样写取不到Text的值吗?
magicbacon 2008-06-15
  • 打赏
  • 举报
回复
UpDate是点击“更新”后触发的事件,也就是对数据库的更新“UPDATE datasheet SET tag=@tagvalue WHERE id=@id”,这是我的理解。事件具体哪里有错,请点明好吗,谢谢啦~~
一品梅 2008-06-15
  • 打赏
  • 举报
回复
 Dim s As String = (CType(e.Item.FindControl("txtTag"), TextBox)).Text

it_sql 2008-06-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fkuk2 的回复:]
是用C#吗?
2003visual

string str=((textbox)e.Item.FindControl("TextBox1").Text)
[/Quote]
一品梅 2008-06-15
  • 打赏
  • 举报
回复
是事件写错了吧...
magicbacon 2008-06-15
  • 打赏
  • 举报
回复
数据绑定部分我是这样写的:
<asp:DataGrid  ID="dgAppDet" runat="server" AutoGenerateColumns="false" ShowHeader="true" HeaderStyle-BackColor="#f3f3f3" Width="540" OnEditCommand="dgAppDet_EditCommand" OnItemDataBound="dgAppDet_ItemDataBound" OnUpdateCommand="dgAppDet_UpdateCommand">
<Columns>
<asp:TemplateColumn HeaderText="No." HeaderStyle-BackColor="#f3f3f3" ItemStyle-Width="10">
<ItemTemplate>
<%#Container.ItemIndex + 1%>
</ItemTemplate>
</asp:TemplateColumn>
<%-- <asp:BoundColumn DataField="tag" HeaderText="设备名称" ItemStyle-Width="80"></asp:BoundColumn>
<asp:BoundColumn DataField="spec" HeaderText="型号规格" ItemStyle-Width="80"></asp:BoundColumn>
<asp:BoundColumn DataField="plnquty" HeaderText="计划数量" ItemStyle-Width="80"></asp:BoundColumn>
<asp:BoundColumn DataField="plnprice" HeaderText="计划单价" ItemStyle-Width="80"></asp:BoundColumn>--%>
<asp:TemplateColumn HeaderText="设备名称">
<EditItemTemplate>
<asp:TextBox ID="txtTag" runat="server" Width="75" Text='<%# Bind("tag") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="型号规格">
<EditItemTemplate>
<asp:TextBox ID="txtSpec" runat="server" Width="75" Text='<%# Bind("spec") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="计划数量">
<EditItemTemplate>
<asp:TextBox ID="txtPlnQuty" runat="server" Width="75" Text='<%# Bind("plnquty") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="计划单价">
<EditItemTemplate>
<asp:TextBox ID="txtPlnPrice" runat="server" Width="75" Text='<%# Bind("plnprice") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" EditText="编辑" CancelText="取消"></asp:EditCommandColumn>
</Columns>
</asp:DataGrid>


不明白编辑状态下输入数据后为什么找不到TextBox的Text值,请各位指点。
magicbacon 2008-06-15
  • 打赏
  • 举报
回复
各位,我试过了,用了模板列:
    Protected Sub dgAppDet_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs)
Dim s As String = CType(e.Item.FindControl("txtTag"), TextBox).Text
Response.Write(s)
End Sub

可是还是不行,不论是用MsgBox还是Response.Write()都不显示任何东西,这是为什么呢?我想应该是找到了控件了的,因为并没有报错,但是就是没有显示,这样我就没法更新数据或者Insert纪录了。还请各位指点。小弟用的VB.NET,不好意思。
magicbacon 2008-06-15
  • 打赏
  • 举报
回复
多谢各位热心解答,小弟用的是VB,一直在用MagBox调试的。
那么我就用模板列试试了,谢谢各位。
magicbacon 2008-06-15
  • 打赏
  • 举报
回复
解决了,各位。
我的DataSource的初始化代码写错位置了,所以每次Page_Load的时候都会初始化,所以取不到新的值。
低级错误,浪费大家时间了,抱歉。作为新手我会更加细心地写代码,自己找错,谢谢各位的帮助。
一品梅 2008-06-15
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 only_endure 的回复:]
引用 19 楼 magicbacon 的回复:
还是不行,问题是现在不光是取不到值,PostBack后TextBox里填写的值竟然不见了,刚才好像不是这样的,也许我记错了,那么怎么会这样呢?控件里填写的值在PostBack后不是会保留的吗?

啥意思,这个命令是用户自定义事件,要写上更新语句的.
[/Quote]
设置允许自动更新没,如果没设置,就要手工写更新代码.
magicbacon 2008-06-15
  • 打赏
  • 举报
回复
<asp:DataGrid  ID="dgAppDet" runat="server" AutoGenerateColumns="false" ShowHeader="true" HeaderStyle-BackColor="#f3f3f3" Width="540" OnEditCommand="dgAppDet_EditCommand" OnItemDataBound="dgAppDet_ItemDataBound" OnUpdateCommand="dgAppDet_UpdateCommand">
<Columns>
<asp:TemplateColumn HeaderText="No." HeaderStyle-BackColor="#f3f3f3" ItemStyle-Width="10">
<ItemTemplate>
<%#Container.ItemIndex + 1%>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="设备名称">
<ItemTemplate>
<asp:Label ID="lblTag" runat="server" Text='<%# Bind("tag") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtTag" runat="server" Width="75" Text='<%# Bind("tag") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="型号规格">
<ItemTemplate>
<asp:Label ID="lblSpec" runat="server" Text='<%# Bind("spec") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtSpec" runat="server" Width="75" Text='<%# Bind("spec") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="计划数量">
<ItemTemplate>
<asp:Label ID="lblPlnQuty" runat="server" Text='<%# Bind("plnquty") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtPlnQuty" runat="server" Width="75" Text='<%# Bind("plnquty") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="计划单价">
<ItemTemplate>
<asp:Label ID="lblPlnPrice" runat="server" Text='<%# Bind("plnprice") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtPlnPrice" runat="server" Width="75" Text='<%# Bind("plnprice") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" EditText="编辑" CancelText="取消"></asp:EditCommandColumn>
</Columns>
</asp:DataGrid>

这样的代码可以显示数据了,但是更新时还是取不到改过的数据。
magicbacon 2008-06-15
  • 打赏
  • 举报
回复
各位,我真的是一头雾水了。我的代码显示出来不是可编辑状态,但是不显示数据,点击了“编辑”后该行会变成可编辑状态并显示数据,但是Update时,由TextBox获得的仍然是修改前的数据,并且在页面刷新后,修改的数据就会丢失,回到原来的数据。我看了很多DataGrid的例子,不应该出现这种情况的啊,还请各位指点。
GengWH 2008-06-15
  • 打赏
  • 举报
回复
Protected Sub dgAppDet_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs)
Dim s As String = CType(e.Item.FindControl("txtTag"), TextBox).Text
Response.Write(s)
End Sub
用模板列试试
amandag 2008-06-15
  • 打赏
  • 举报
回复
楼主,就你的页面代码,页面显示出来DataGrid的每行都是可编辑状态,这是你想要的么?
Coco孙 2008-06-14
  • 打赏
  • 举报
回复
建议搂主先将
response.wirte(e.Item.Cells(1).Controls(0), TextBox).Text)
看看有结果没?
xie_yanke 2008-06-14
  • 打赏
  • 举报
回复
你可以...

<%
MsgBox("sdfsdfsd")
%>

系统提示:
System.InvalidOperationException: 当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。

:)
xie_yanke 2008-06-14
  • 打赏
  • 举报
回复
MsgBox ....不能用在Web上吧....
加载更多回复(6)

62,046

社区成员

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

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

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

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