【问题标题】:Binding value to textbox inside of gridview将值绑定到gridview内的文本框
【发布时间】:2013-02-08 07:40:41
【问题描述】:

我在将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

【问题讨论】:

  • 当用户点击链接时,GridView 是否进入编辑模式?
  • 是的,虽然我需要点击两次edit-img/按钮。但是,文本框保持为空。

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


【解决方案1】:

我假设GridView 永远不会进入编辑模式,因为您没有处理RowEditing 事件,或者您在设置gvBS.EditIndex = e.NewEditIndex; 之后没有处理DataBind

<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 属性:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindGrid();
    }
}

【讨论】:

  • 看看我上次的编辑。我确实做了这些方法,但好吧..不起作用。 :)
  • @user854699:我已经使用自定义数据源(手动填充的DataTable)测试了您的网格......它按预期工作。您还没有在 RowEditing 中对 GridView 进行数据绑定。查看我的代码。
  • 哦,我发现了错误。我没有在 rowedit-event 中调用 databind 方法。谢谢大家。
【解决方案2】:

像这样在 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 2017-04-17
    • 2017-04-07
    • 1970-01-01
    • 2013-08-04
    相关资源
    最近更新 更多