在GridView的TemplateField中获取Panel中TextBox的值

时间:2015-11-29 21:17:40

标签: asp.net gridview panel templatefield

我有一个带TemplateField的GridView。 ItemTemplate内有2个TextBox,然后是<table> Panel。在那个小组中有另一个TextBox 如何获取最后一个TextBox的值?
我有gridview排的索引,但我不知道怎么从那里开始。
(来自DB的数据在页面加载时绑定)。

<asp:ScriptManager runat="server"></asp:ScriptManager>
<asp:GridView ID="grv_Four_Rows" runat="server" AutoGenerateColumns="False"
    ShowHeader="False" CellPadding="3" CssClass="myGrid" DataKeyNames="Test1_First_Name">
    <RowStyle BackColor="#b5c7de" />
    <AlternatingRowStyle BackColor="#d1e0e0" />
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:TextBox ID="txbFirstName" runat="server" CssClass="myTextBox" ReadOnly="false" Text='<%# Eval("Test1_First_Name")%>'></asp:TextBox>
                <asp:TextBox ID="txbLastName" runat="server" CssClass="myTextBox" ReadOnly="true" Text='<%# Eval("Test1_Last_Name")%>'></asp:TextBox>
                <table style="width: 350px;">
                    <asp:Panel ID="upp_2nd_row" runat="server" Visible="true">
                         <td style="float: left">
                             <a style="color: red; font-weight: bold;">Address: </a>
                             <asp:TextBox ID="txbAddress" Width="200px" Font-Bold="true" runat="server" Text='<%# Eval("Test1_Address")%>' />&nbsp;&nbsp;
                         </td>
                         <td style="float: right">
                             <asp:Button ID="btn_Edit_Details" runat="server" Text="Go" Font-Bold="true"
                                    OnClick="my_Update_details" CommandArgument='<%#DataBinder.Eval(Container, "DataItemIndex")%>' />
                         </td>
                    </asp:Panel>
                </table>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<br />
<asp:Label ID="lblMessage1" runat="server" BackColor="Yellow" Font-Bold="true"></asp:Label>

C#代码背后:

    protected void my_Update_details(object sender, EventArgs e)
    {
        string my_row_index = (sender as Button).CommandArgument;
        lblMessage1.Text = "Row Index: " + my_row_index;
    }

当我点击&#34; Go&#34;任何行中的按钮都会触发my_Update_details事件。它只是显示gridview的当前行索引,值正确。
但是在my_Update_details中,我还想选择文本框的值,以及我被卡住的地方(用户应该更改其值和&#39; Go&#39;按钮应该更新DB)。在下面的示例中,我单击了第4行中的按钮,它正确地将索引显示为3:
enter image description here

1 个答案:

答案 0 :(得分:0)

所以这就是它的工作原理:首先我绞尽脑汁待几天,然后我在SO中发布一个问题,然后 - 2分钟后我找到了解决方案......
我所做的只是在my_Update_details方法(第二行)中添加一行:

    protected void my_Update_details(object sender, EventArgs e)
    {
        string my_row_index = (sender as Button).CommandArgument;
        TextBox AAAAAA = (TextBox)grv_Four_Rows.Rows[Convert.ToInt32(my_row_index)].Cells[0].FindControl("txbAddress");
        lblMessage1.Text = "Address: " + AAAAAA.Text;
        lblMessage2.Text = "Row Index: " + my_row_index;
    }

现在我明白了:
enter image description here

这正是我所需要的:获取txbAddress文本框中的值。
希望它能帮助将来的某个人......