首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CodeBehind访问EditItemTemplate

从CodeBehind访问EditItemTemplate
EN

Stack Overflow用户
提问于 2011-06-15 01:41:47
回答 2查看 2.7K关注 0票数 1

与EditItemTemplate打交道时,我遇到了问题。

我尝试做的是更新我的TextBox txt_name,但是我不能获得用户输入的内容,我在代码隐藏中获得了旧的值。

我是不是遗漏了什么?

前端代码

代码语言:javascript
复制
<asp:GridView ID="GridView_account" runat="server" AutoGenerateColumns="false" ShowFooter="True"
    OnRowCancelingEdit="GridView_account_RowCancelingEdit" OnRowEditing="GridView_account_RowEditing"
    OnRowUpdating="GridView_account_RowUpdating" OnRowCommand="GridView_account_RowCommand"
    OnRowDeleting="GridView_account_RowDeleting" OnSelectedIndexChanged="GridView_account_SelectedIndexChanged"
    DataKeyNames="UID" Height="110px" Width="497px">
    <Columns>
        <asp:TemplateField HeaderText="UID" SortExpression="UID">
            <ItemTemplate>
                <asp:Label ID="label_accid" runat="server" Text='<%# Bind("UID") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="User Name (required)" SortExpression="NyA">
            <EditItemTemplate>
                <asp:TextBox ID="txt_name" runat="server" Text='<%# Bind("NyA") %>'/>
            </EditItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="txt_newname" runat="server"></asp:TextBox>
            </FooterTemplate>
            <ItemTemplate>
                <asp:Label ID="label_name" runat="server" Text='<%# Bind("NyA") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Email Address (required)" SortExpression="eMail">
            <EditItemTemplate>
                <asp:TextBox ID="txt_email" runat="server" Text='<%# Bind("eMail") %>'></asp:TextBox>
            </EditItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="txt_newemail" runat="server"></asp:TextBox>
            </FooterTemplate>
            <ItemTemplate>
                <asp:Label ID="label_email" runat="server" Text='<%# Bind("eMail") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Options" ShowHeader="False">
            <EditItemTemplate>
                <asp:LinkButton ID="LinkButton_update" runat="server" CausesValidation="True" CommandName="Update"
                    Text="Update"></asp:LinkButton>
                <asp:LinkButton ID="LinkButton_cancel" runat="server" CausesValidation="False" CommandName="Cancel"
                    Text="Cancel"></asp:LinkButton>
                <asp:LinkButton ID="LinkButton_delete" runat="server" CausesValidation="False" CommandName="Delete"
                    Text="Delete"></asp:LinkButton>
            </EditItemTemplate>
            <FooterTemplate>
                <asp:LinkButton ID="LinkButton_addnew" runat="server" CausesValidation="False" CommandName="AddNew"
                    Text="Add New"></asp:LinkButton>
            </FooterTemplate>
            <ItemTemplate>
                <asp:LinkButton ID="LinkButton_edit" runat="server" CausesValidation="False" CommandName="Edit"
                    Text="Edit"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Manage Role" ShowHeader="False">
            <ItemTemplate>
                <asp:LinkButton ID="Selectbtn" runat="server" CausesValidation="False" CommandName="Select"
                    Text="Select"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

代码隐藏

代码语言:javascript
复制
protected void GridView_account_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    user u = Business.GetUser(((Label)GridView_account.Rows[e.RowIndex].FindControl("label_accid")).Text);
    //HERE'S MY PROBLEM!
    u.fullname = ((TextBox)GridView_account.Rows[e.RowIndex].FindControl("txt_name")).Text;
    //txt_name is returning the old value and not the one the user has input recently.

    Business.UpdateUser(u);
    GridView_account.EditIndex = -1;
    fillgridview();
}//
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-15 02:11:50

在绑定网格时,您是否检查页面是否为IsPostback?如果是回发,则不需要在Page_Load中重新绑定它,否则将丢失新值,因为Page Init和Page Load事件发生在其他事件之前,例如网格更新事件。

票数 2
EN

Stack Overflow用户

发布于 2011-06-15 02:15:08

也许你在每个page_load事件上都绑定了你的网格。如果是这样的话,你需要这样的东西:

代码语言:javascript
复制
 protected void Page_Load(object sender, EventArgs e)
 {
    if(!Page.IsPostBack)
    {
       GridView_account.DataSource = "data source";
       GridView_account.DataBind();
    }
 }

或者用来代替

代码语言:javascript
复制
 if(!Page.IsPostBack) 

您可以使用

代码语言:javascript
复制
 if (GridView_account.EditIndex == -1)

这将检查网格是否处于编辑模式。如果网格未处于编辑模式,则可以将网格与数据源绑定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6347698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档