2017-09-07 22 views
0

GridView1_RowEditing1イベントを使用して、gridview select行からセッション値を渡そうとしています。プライマリキー(p.key)のセッション値を取得できますが、Associate_IDは空のまま戻ります。gridview findcontrol何も返さない空の文字列(空白)

C#コードの後ろ

protected void GridView1_RowEditing1(object sender, GridViewEditEventArgs e) 
    { 
     int primarykey = Convert.ToInt32(GridView1.DataKeys[e.NewEditIndex].Value); 
     string name = Convert.ToString(GridView1.Rows[e.NewEditIndex].FindControl("Associate_ID")); 
     Session["Number"] = primarykey; 
     Session["Name"] = name; 
     //redirect 
     Response.Redirect("updatee.aspx"); 
    } 

.ASPX

<asp:TemplateField HeaderText="Associate_ID" SortExpression="Associate_ID"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Associate_ID") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Associate_ID") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 

OUTPUT:

キー:5

名前:あなたが見ることができるように私は

を取得しておりません選択したフィールドのAssociate_ID。 はまた

string name = Convert.ToString(GridView1.Rows[3].Cells[3].FindControl("Associate_ID")); 

を使用して試みたが、何の結果はありませんでした、グリッドは、複数の列と行(8×15)を有し

gridview findcontrol returning empty ""の提案を試み、ポストバックで再結合のGridViewを停止しようとしました。 GridViewのから 削除DataSourceID

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" OnRowEditing="GridView1_RowEditing1" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"> 

コードこの

 protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      //DataSourceID = "SqlDataSource1" 
      GridView1.DataSource = SqlDataSource1; 
      GridView1.DataBind(); 
     } 
    } 

なしの背後には、助けました。私はまだAssociate_IDの空白値を取得しています。 問題がどこにあるかわかりません。助けてください!

答えて

0

FindControlでコントロールAssociate_IDを検索しようとしています。しかし、それは存在しません。 TextBox1を検索するか、TextBoxの名前をAssociate_IDに変更してください。

<EditItemTemplate> 
    <asp:TextBox ID="Associate_ID" runat="server" Text='<%# Bind("Associate_ID") %>'></asp:TextBox> 
</EditItemTemplate> 

//or 

string name = Convert.ToString(GridView1.Rows[3].Cells[3].FindControl("TextBox1")); 

UPDATE

私は何とかあなたが編集状態がGridViewコントロールを再バインドすることによって活性化される前に、これらのコントロールにアクセスしようとしている、問題を参照してください。編集インデックスが設定されていません。 FindControlの前に配置します。

GridView1.DataSource = yourSource; 
GridView1.EditIndex = e.NewEditIndex; 
GridView1.DataBind(); 
+0

遭遇され、私の作業のコードは次のようになります空白 "" – rakesh

+0

も、テキストボックスの名前を変更しようとしましたが、まだ同じです:( – rakesh

+0

は、実際には以下を使用してNULLを返すことを確認しました。 - にFindControl( "のTextBox1"); ' '文字列QUES =名.text)は 'これは – rakesh

0

ありがとう、私はついにVDWWDを働かせました。 問題は、FindControlを使ってgridviewで 'TextBox'要素を取得することができなかったことです。 解決策は、ページのPostBackでGridViewを再バインドせず、RowEditingイベントでインデックスを編集することでした。

これは、いずれかがこれまであなたが述べたように、私は変更するテキストボックスのIDを試してみましたが、それは与えていない同様の問題

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      GridView1.DataSource = SqlDataSource1; 
      GridView1.DataBind(); 
     } 
    } 
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     GridView1.DataSource = SqlDataSource1; 
     GridView1.EditIndex = e.NewEditIndex; 
     GridView1.DataBind(); 
     TextBox txt = GridView1.Rows[e.NewEditIndex].FindControl("TextBox1") as TextBox; 
     string name = txt.Text; 
    } 

.ASPX

 <EditItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("CountryName") %>'></asp:TextBox> 
       </EditItemTemplate> 
関連する問題