私はFindControl
を使用して、私のGridViewから選択された行のテキスト値を取得しようとしていますが、FindControl
は常にNULLとして返します空。/RowDataBoundイベントのコントロールがNULLとして返す検索
.ASPXコード:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="CID" DataSourceID="SqlDataSource1" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:CommandField ShowSelectButton="True" />
<asp:BoundField DataField="CID" HeaderText="CID" InsertVisible="False" ReadOnly="True" SortExpression="CID" />
<asp:BoundField DataField="CountryID" HeaderText="CountryID" SortExpression="CountryID" />
<asp:TemplateField HeaderText="CountryName" SortExpression="CountryName">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("CountryName") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("CountryName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
C#コード:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
TextBox txt = e.Row.FindControl("TextBox1") as TextBox;
string name = txt.Text; // returns as NULL
}
}
は、誰もがここで私が間違っているのかを指し示すことができるか、これを行う他の方法はありますか?選択ボタンをクリックしたとき、上記のGridViewからCountryName
の値を取得したかったのです。あなたは次のように選択ボタンのクリックから値を取得するためにOnRowCommand
イベントを使用することができます
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
// check if its not a header or footer row
if (e.Row.RowType == DataControlRowType.DataRow)
{
// check if its in a EditTemplate
if (e.Row.RowState == DataControlRowState.Edit)
{
TextBox txt = e.Row.FindControl("TextBox1") as TextBox;
string name = txt.Text;
}
}
}
OR
:あなたはGridViewののEditTemplate
モードからの制御を見つける/確認する必要がコメント上記@AlexKurryashevよう
'ID =" TextBox1 "でのコントロールは' EditItemTemplate'のみにあります。 'e.Row.RowState == DataControlRowState.Edit'を試してください。あるいは 'TextBox'と' Label'に同じIDを与えます。 –