2015-04-16 2 views
0

В моем коде есть один gridview1. При нажатии на кнопку редактирования получение ошибки Ссылка на объект не установлена ​​в экземпляр объекта. все мои столбцы - это template fields.id - это datakey. и я также могу получить данные из базы данных. Что здесь не так. ?Текстовый объект не может создать с помощью элемента управления find

protected void Edit_Button_Click(object sender, EventArgs e) 
    { 
     GridViewRow gr = (GridViewRow)((Button)sender).NamingContainer; 
     int id = Convert.ToInt32(GridView1.DataKeys[gr.RowIndex].Value); 

     cmd = new SqlCommand("select * from students where id = '"+id+"'",con); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 

     TextBox name = (TextBox)GridView1.Rows[gr.RowIndex].FindControl("name_TextBox"); 



     name.Text = "bhavin"; 
} 

и это моя страница aspx.

<asp:TemplateField HeaderText="Name"> 
       <EditItemTemplate> 
        <asp:TextBox ID="name_TextBox" runat="server" Text='<%# Eval("st_name") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Label3" runat="server" Text='<%# Eval("st_name") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 

. 
. 
. 
. 
<asp:TemplateField HeaderText="Action"> 
       <EditItemTemplate> 
        <asp:Button ID="Button3" runat="server" Text="Update" /> 
        <asp:Button ID="Button4" runat="server" Text="Cancel" /> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Button ID="Edit_Button" runat="server" Text="Edit" OnClick="Edit_Button_Click" /> 
        <asp:Button ID="Button2" runat="server" Text="Delete" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
+2

Хорошо, вы прошли через код в отладчике? Он точно скажет вам, какая строка выбрасывает ошибку. Я предполагаю, что FindControl возвращает null. – OldProgrammer

ответ

1

Без вашего кода на стороне клиента (html) это немного сложно.

Но, как вы сказали, вы используете шаблонные столбцы.

Разве вы не забыли разместить текстовое поле с ID="name_TextBox" в EditItemTemplate?

так:

<EditItemTemplate> 
    <asp:TextBox id="name_TextBox"><asp:TextBox> 
    </EditItemTemplate> 

ОБНОВЛЕНО ОТВЕТ

Проблема заключается в том, вы не можете получить доступ контроля в Gridview_RowEditing. Элементы управления будут отображаться после этого события (, если моя память по-прежнему надежна: такое время я перешел в MVC). Если вам удастся это событие, вы должны связать GridView, пример:

protected void YourGridView_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    //you tell Gridview which row gonna be editing : 
    YourGridView.PageIndex = e.NewPageIndex; 
    //then you Bind data to the GridView (as you bind data as you did on load for instance) 
    YourGridView.DataSource = YourDataSetOrDataTable 
    YourGridView.DataBind(); 
} 

Если вы хотите получить доступ к управлению, вы можете использовать gridView_rowDataBound() события вместо этого.

+0

Я добавил свой код страницы aspx too.thanks для ответа –

Смежные вопросы