• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.netGridViewEval和Bind区别小解

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

    

    最近在做课程设计,GridView绑定SqlDataSouce进行数据更新的时候出现了难点,就是自定义在EditItemTemplete里的控件无法获取服务器ID。也就是说,如果不用GridView自带的Row_Updating事件的话(也就是不能用myGridview.Rows[e.RowIndex].Cells[...].Controls[...].FindControl("控件ID")来搜索控件),我就不能传参给UpdateCommand!!!纠结了好久,现在把解决方案记下来。

 

http://www.cnblogs.com/yangfan/archive/2008/05/26/1207258.html

首先引用一篇网上点击最高的博客,引入BindEval的概念。

 

大体来说,Eval单纯用来展示数据Bind可以被修改并回写到数据库

那么问题就来了,怎么回写?

这是我的一个SqlDataSouce Demo

<asp:SqlDataSource ID="SqlDataSource" runat="server"
        ConnectionString="<%$ ConnectionStrings:MyConnection %>"
        SelectCommand="SELECT [RoomId],[RoomCategory].[RcategoryId],[RoomCategory].[categoryName],
        [Rposition], [Description] FROM [RoomsInfo],[roomcategory]
        where [RoomsInfo].[RcategoryId]=[RoomCategory].[RcategoryId]"
        UpdateCommand="update RoomsInfo set RcategoryId = @RcategoryId,Rposition = @Rposition,Description = @Description where RoomId = @RoomId">
        <UpdateParameters>
            <asp:Parameter Name="RcategoryId" Type="String" />
            <asp:Parameter Name="Rposition" Type="String" />
            <asp:Parameter Name="Description" Type="String" />
            <asp:Parameter Name="RoomId" Type="String" />
        </UpdateParameters>
    </asp:SqlDataSource>

请注意上面橙色的一个长字符串UpdateCommand里@开头的标变量和一个UpdateParameters标记段里的几个值。ASP.NET框架似乎就是用它们,实现了“识别”所有采用Bind字段绑定的值。那么到这里,我们先记住一点,他们是有先后顺序的!!!

 

 

我折腾了一下午带一个晚上,得出的理解是(如有错误,请一定告诉我!):你在GridView里用了多少个Bind,你UpdateCommand字符串里面至少就应该有多少个标变量

现在来看我的gridview:

<asp:GridView ID="myGridview" CssClass="GridViewStyle" runat="server" AllowSorting="True" AutoGenerateColumns="False" DataSourceID="SqlDataSource" DataKeyNames="RoomId">
            <Columns>
                <asp:TemplateField HeaderText="房间号" SortExpression="RoomId">
                    <ItemTemplate>
                        <asp:Label ID="Label_RoomId" runat="server" Text='<%# Eval("RoomId") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="房间类型" SortExpression="categoryName">
                    <ItemTemplate>
                        <asp:Label ID="Label_RcategoryId" runat="server" Text='<%# Eval("RcategoryId") %>'></asp:Label><asp:Label ID="Label_categoryName" runat="server" Text='<%# Eval("categoryName") %>'></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox runat="server" ID="RcategoryId" Text='<%# Bind("RcategoryId") %>' />
                        <asp:RequiredFieldValidator ID="Req_RcategoryId" runat="server"
                            ErrorMessage="*"
                            ControlToValidate="RcategoryId"
                            Display="Dynamic"
                            ValidationGroup="submit"></asp:RequiredFieldValidator>
                    </EditItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="房间位置" SortExpression="Rposition">
                    <ItemTemplate>
                        <img src="../images/floors/floor<%# Eval("Rposition")%>.png" class="GridView_floorImg" title="此房间位于<%# Eval("Rposition")%>楼" alt="此房间位于<%# Eval("Rposition")%>楼" />
                    </ItemTemplate>
                    <EditItemTemplate>

                        <asp:TextBox runat="server" ID="Rposition" Text='<%# Bind("Rposition") %>' />
                        <asp:RequiredFieldValidator ID="Req_Rposition" runat="server"
                            ErrorMessage="*"
                            ControlToValidate="Rposition"
                            Display="Dynamic"
                            ValidationGroup="submit"></asp:RequiredFieldValidator>
                    </EditItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderStyle-CssClass="description-edit-delete-head" HeaderText="备注">
                    <ItemTemplate>
                        <span class="decriptionText"><%# Eval("Description")%></span>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox runat="server" ID="Description" Text='<%# Bind("Description") %>' />
                        <asp:RequiredFieldValidator ID="Req_Description" runat="server"
                            ErrorMessage="*"
                            ControlToValidate="Description"
                            Display="Dynamic"
                            ValidationGroup="submit"></asp:RequiredFieldValidator>
                    </EditItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderStyle-CssClass="description-edit-delete-head" HeaderText="编辑">
                    <EditItemTemplate>
                        <asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="True" ValidationGroup="submit" CommandName="Update" OnClientClick="return confirm('请检查您的所有输入。\n请不要输入非法信息。\n\n确认要提交吗?');" ToolTip="更新" ImageUrl="../images/ico/update.png" CssClass="GridView_imgBtn_option" AlternateText="更新" />
                        <asp:ImageButton ID="ImageButton2" runat="server" CausesValidation="False" CommandName="Cancel" OnClientClick="return confirm('确认要放弃所有修改吗?');"  ToolTip="取消" ImageUrl="../images/ico/cancel.png" CssClass="GridView_imgBtn_option" AlternateText="取消" />
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="False" CommandName="Edit" ToolTip="编辑" ImageUrl="../images/ico/edit.png" CssClass="GridView_imgBtn" AlternateText="编辑" />
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderStyle-CssClass="description-edit-delete-head" HeaderText="删除">
                    <ItemTemplate>
                        <asp:ImageButton ID="ImageButton_delete" runat="server" OnClientClick="return confirm('确认要删除此条信息吗?\n请谨慎操作,删除操作不可恢复!');" CausesValidation="False" CommandName="Delete" ToolTip="删除" ImageUrl="../images/ico/delete.png" AlternateText="删除" CssClass="GridView_imgBtn"></asp:ImageButton>
                    </ItemTemplate>
                </asp:TemplateField>

            </Columns>
            <FooterStyle CssClass="GridViewFooterStyle" />
            <RowStyle CssClass="GridViewRowStyle" />
            <SelectedRowStyle CssClass="GridViewSelectedRowStyle" />
            <PagerStyle CssClass="GridViewPagerStyle" />
            <HeaderStyle CssClass="GridViewHeaderStyle" />
        </asp:GridView>

我用橙色标记出了GridView中用了Bind的地方,总共三个,按顺序对应着UpDateCommand中前三个标变量。

至于框架是怎么识别RoomId字段的我还没有研究透,等研究透数据控件的原理或许就知道了,但起码现在对于我来说已经够用了!

注:此时我后台cs文件中并没有代码,GridView也并没有绑定Row_Updating事件,可一切就这么发生了!感想就是,对于初学者发现自己的数据成功绑定并正确得到修改还是很有成就感的。

 

看着同学项目中杂七杂八难看的代码,不禁感叹微软的小控件的微妙之处。

有空决定再写一篇关于CSS美化asp.net自带控件的博文吧!

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NetCore开发(踩坑)指南发布时间:2022-07-10
下一篇:
TeamDevelopmentwithASP.NET发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap