将值绑定到gridview内的文本框

时间:2013-02-08 07:40:42

标签: asp.net vb.net gridview binding textbox

我遇到了将gridview中的字段值绑定到gridview内部的文本框的问题。我打算这样做来编辑表格。

我尝试使用eval和bind执行此操作,但文本框不会显示值,我完全不知道为什么。

<asp:UpdatePanel runat="server">
    <ContentTemplate>
        <asp:GridView ID="gvBS" runat="server" AutoGenerateColumns="false" DataKeyNames="ID" SkinID="gvWithoutWidth">
         <Columns>
            <asp:CommandField ShowEditButton="true" EditImageUrl="~/Images/GridView/gv_edit.png" ButtonType="Image" 
                CancelImageUrl="~/Images/GridView/gv_cancel.png" UpdateImageUrl="~/Images/GridView/gv_update.png"/>
            <asp:TemplateField HeaderText="Sollmonat" HeaderStyle-HorizontalAlign="Left">
                <EditItemTemplate>
                    <asp:TextBox ID="tbSollMonat" runat="server" Text='<%# Eval("SollMonat") %>'></asp:TextBox>
                    <asp:RequiredFieldValidator ID="rfvSollMonat" ValidationGroup="Update" runat="server"
                        ControlToValidate="tbSollMonat" ErrorMessage="Bitte Sollmonat (dd.mm.yyyy) angeben"
                        SetFocusOnError="true">*</asp:RequiredFieldValidator> 
                    <asp:RegularExpressionValidator ID="revSollMonat" ValidationGroup="Update" runat="server"
                        ValidationExpression="^\d+$" ControlToValidate="tbSollMonat">*</asp:RegularExpressionValidator>
                </EditItemTemplate>
                <ItemTemplate>
                    <%# Eval("SollMonat")%>
                </ItemTemplate>
            </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>

问题是它在ItemTemplate中工作正常,但不在EditItemTemplate元素内部。真的不知道问题是什么。

代码背后:

Sub gvBS_RowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs) Handles gvBS.RowEditing
        gvBS.EditIndex = e.NewEditIndex
    End Sub

    Sub gvBS_RowCancelingEdit() Handles gvBS.RowCancelingEdit
        Me.gvBS.EditIndex = -1
        gvBS_DataBind()
    End Sub

2 个答案:

答案 0 :(得分:2)

我认为GridView进入永不编辑模式,因为您没有处理RowEditing事件,或者您设置{{1}后没有DataBind它}。

gvBS.EditIndex = e.NewEditIndex;

codebehind(<asp:GridView OnRowEditing="gvBS_RowEditing" OnRowCancelingEdit="gvBS_RowCancelingEdit" ID="gvBS" runat="server" AutoGenerateColumns="false" DataKeyNames="ID" SkinID="gvWithoutWidth"> 是数据绑定网格的方法):

BindGrid

您还应该记得仅在第一次加载时对其进行数据绑定,而不是在启用protected void gvBS_RowEditing(object sender, GridViewEditEventArgs e) { gvBS.EditIndex = e.NewEditIndex; BindGrid(); } protected void gvBS_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { gvBS.EditIndex = -1; BindGrid(); } 时连续回发(默认)。因此,您可以查看页面的ViewState属性:

IsPostBack

答案 1 :(得分:0)

在EditItemTemplate中尝试Bind而不是Eval,就像这样

<asp:UpdatePanel runat="server">
<ContentTemplate>
    <asp:GridView ID="gvBS" runat="server" AutoGenerateColumns="false" DataKeyNames="ID" SkinID="gvWithoutWidth">
     <Columns>
        <asp:CommandField ShowEditButton="true" EditImageUrl="~/Images/GridView/gv_edit.png" ButtonType="Image" 
            CancelImageUrl="~/Images/GridView/gv_cancel.png" UpdateImageUrl="~/Images/GridView/gv_update.png"/>
        <asp:TemplateField HeaderText="Sollmonat" HeaderStyle-HorizontalAlign="Left">
            <EditItemTemplate>
                <asp:TextBox ID="tbSollMonat" runat="server" Text='<%# Bind("SollMonat") %>'></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvSollMonat" ValidationGroup="Update" runat="server"
                    ControlToValidate="tbSollMonat" ErrorMessage="Bitte Sollmonat (dd.mm.yyyy) angeben"
                    SetFocusOnError="true">*</asp:RequiredFieldValidator> 
                <asp:RegularExpressionValidator ID="revSollMonat" ValidationGroup="Update" runat="server"
                    ValidationExpression="^\d+$" ControlToValidate="tbSollMonat">*</asp:RegularExpressionValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <%# Eval("SollMonat")%>
            </ItemTemplate>
        </asp:TemplateField>
        </Columns>
    </asp:GridView>
</ContentTemplate>