【问题标题】:How to update the text of a TextBox on the same page in the GridViewRowCommand Event如何在 GridView RowCommand 事件中更新同一页面上文本框的文本
【发布时间】:2012-08-09 21:29:03
【问题描述】:

您好,我有一个 Gridview 和一个文本框,它们位于 Ajax 更新面板中。

出处如下:

<asp:UpdatePanel ID="UpdatePanelAdmissionDefaultSettings" runat="server">
<ContentTemplate>
<asp:GridView ID="GridViewMeritDetails" runat="server" AutoGenerateColumns="False" 
        BackColor="White" BorderColor="#5C5C5C" BorderStyle="Solid" BorderWidth="1px" 
        CellPadding="4" ForeColor="Black" CssClass="MeritGridStyle" 
            onrowdatabound="GridViewMeritDetails_RowDataBound" 
            onrowcommand="GridViewMeritDetails_RowCommand">
<RowStyle BackColor="#F7F7DE" />
<Columns>
<asp:BoundField HeaderText="Field Name" DataField="MeritField" />
<asp:BoundField HeaderText="Field ID" DataField="MeritFieldID" />
<asp:ButtonField CommandName="edit" HeaderText="Edit" Text="Edit" />
<asp:ButtonField CommandName="delete" HeaderText="Delete" Text="Delete" />
</Columns>
<FooterStyle BackColor="#CCCC99" />
<PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
<SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>


<asp:TextBox ID="TextBoxMeritFieldName" runat="server"></asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>

我的问题是,当我单击 GridView 中的编辑按钮时,我想在文本框中所选行的单元格中显示值。我已经给出了在 Gridview RowCommand 事件中显示它的代码。但它不起作用。

下面是代码:

protected void GridViewMeritDetails_RowCommand(object sender, GridViewCommandEventArgs e)
{
    int iRowIndex = Convert.ToInt32(e.CommandArgument);
    if (e.CommandName == "edit")
    {
        TextBoxMeritFieldName.Enabled = true;
        TextBoxMeritFieldName.Text = GridViewMeritDetails.Rows[iRowIndex].Cells[0].Text.Trim();
    }
    else if (e.CommandName == "delete")
    {
        //Add code to delete merit field
    }
}

我调试的时候,控件进入RowCommand到达行

TextBoxMeritFieldName.Text = GridViewMeritDetails.Rows[iRowIndex].Cells[0].Text.Trim();

但是文本没有显示在页面上。我错过了什么?

【问题讨论】:

    标签: c# asp.net ajax


    【解决方案1】:

    设置UpdatePanel的模式

    <asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="UpdatePanelAdmissionDefaultSettings" runat="server" >
    

    【讨论】:

    • 我试过这个。但这没有帮助。感谢您努力帮助我。
    • 使用 UpdateMode="Conditional" 而不是 Mode,我已经更正了我的答案。
    【解决方案2】:
    <asp:UpdatePanel Mode="Conditional" ID="UpdatePanelAdmissionDefaultSettings" runat="server">
     <ContentTemplate>
      <asp:GridView ID="GridViewMeritDetails" runat="server" AutoGenerateColumns="False" 
        BackColor="White" BorderColor="#5C5C5C" BorderStyle="Solid" BorderWidth="1px" 
        CellPadding="4" ForeColor="Black" CssClass="MeritGridStyle" 
            onrowdatabound="GridViewMeritDetails_RowDataBound" 
            onrowcommand="GridViewMeritDetails_RowCommand">
        <RowStyle BackColor="#F7F7DE" />
           <Columns>
              <asp:BoundField HeaderText="Field Name" DataField="MeritField" />
              <asp:BoundField HeaderText="Field ID" DataField="MeritFieldID" />
              <asp:ButtonField CommandName="edit" HeaderText="Edit" Text="Edit" />
              <asp:ButtonField CommandName="delete" HeaderText="Delete" Text="Delete" />
           </Columns>
           <FooterStyle BackColor="#CCCC99" />
           <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
           <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
           <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
           <AlternatingRowStyle BackColor="White" />
      </asp:GridView>
    
    
     <asp:TextBox ID="TextBoxMeritFieldName" runat="server"></asp:TextBox>
    </ContentTemplate>
    </asp:UpdatePanel>
    

    设置更新面板的一个属性Mode="Conditional"

    【讨论】:

    • 它不能让我的代码工作。但我得到了答案,感谢您尝试帮助我。
    • :AsyncPostBackTrigger 的 EventName 属性是可选的。如果未指定,则控件的 DefaultEventAttribute 属性用于确定默认事件。我在这里找到了msdn.microsoft.com/en-us/library/…
    【解决方案3】:

    感谢您的慷慨回复。

    我知道答案了。

    我在 UpdatePanelAdmissionDefaultSettings 部分添加了以下代码行

    <asp:AsyncPostBackTrigger ControlID="GridViewMeritDetails" />
    

    现在变成了:

    <asp:UpdatePanel Mode="Conditional" ID="UpdatePanelAdmissionDefaultSettings" runat="server">
    

    <asp:TextBox ID="TextBoxMeritFieldName" runat="server"></asp:TextBox>
    </ContentTemplate>
    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="GridViewMeritDetails" />
    </Triggers>
    </asp:UpdatePanel>
    

    我得到了我需要的结果。之前,我的触发器部分是这样的:

    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="GridViewMeritDetails" EventName="RowCommand"/>
    </Triggers>
    

    我刚刚删除了 EventName 属性,它现在可以工作了...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-10
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      相关资源
      最近更新 更多