2017-09-07 41 views
0

我想通過GridView1_RowEditing1事件從gridview選擇行傳遞一個會話值。我能夠獲得primarykey(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控件

<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(); 
     } 
    } 

沒有這個代碼 刪除DataSourceID的幫助。我仍然爲Associate_ID獲得空白值。 我無法看到問題出在哪裏。請幫忙!

回答

0

您正試圖在FindControl中找到Control Associate_ID。但它不存在。找到TextBox1或將文本框重命名爲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

你所說的我試圖改變文本框的ID,但它不是給人一種空白「」 – rakesh

+0

也嘗試重命名文本框,仍然一樣:( – rakesh

+0

確認它確實使用下面的方式返回NULL。的FindControl(「TextBox1的」);'' 串疑問句= name.Text;)' - 這扔一個NullReferenceException錯誤 – rakesh

0

非常感謝你,VDWWD,我終於能夠得到它的工作。 問題是我無法使用FindControl在gridview中使用我的'TextBox'元素。 解決方法是不重新綁定頁面的PostBack上的GridView並在RowEditing事件上編輯索引。

這是我工作的代碼看起來像,是任何人曾經遇到類似的問題

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>