2016-05-25 1 views
0

Я сделал редактирование/обновление/удаление/отмена в gridbox. Все функциональные функции работают нормально. Кроме обновления.Обновление не выполнено внутри Gridbox. Ошибка обработки исключений

Когда я нажимаю, я получаю сообщение об ошибке с указанием,

NullReferenceException was unhandled by the user code. 
Object Reference not set to an instance of an object 

Вот код для обновления данных игровой

protected void Show_Grid_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    int id = int.Parse(Show_Grid.DataKeys[e.RowIndex].Value.ToString()); 
    TextBox title_txt = (TextBox)Show_Grid.Rows[e.RowIndex].FindControl("Title"); 
    TextBox Desc_Txt = (TextBox)Show_Grid.Rows[e.RowIndex].FindControl("Description"); 
    DropDownList Prior_Drop = (DropDownList)Show_Grid.Rows[e.RowIndex].FindControl("Priority"); 

    Update_todo(id, title_txt.Text, Desc_Txt.Text, Prior_Drop.SelectedValue); 
    Show_Grid.EditIndex = -1; 
    BindData(); 
} 
private void Update_todo(int id, string title, string desc, string prior) 
{ 
    string source = "Data Source=.\\SQLEXPRESS;AttachDbFilename=...//...//..//..//tododb.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"; 
    SqlConnection dbconnect = new SqlConnection(source); 
    string query = "UPDATE todolist SET Title='" + title + "', Description='" + desc + "', Priority='" + prior + "' WHERE id =" + id + " "; 
    SqlCommand cmd = new SqlCommand(query, dbconnect); 
    dbconnect.Open(); 
    cmd.ExecuteNonQuery(); 
} 

В Gridbox, во время редактирования я дал TextBox с SingleLine за титул, TextBox с Multiline для описания & DropDown for Priority. я получаю ошибку в этой строке

Update_todo(id, title_txt.Text, Desc_Txt.Text, Prior_Drop.SelectedValue); 

вид сетки разметки

<asp:TemplateField HeaderText="Description"> 
<EditItemTemplate> 
<asp:TextBox ID="Desc_Txt" runat="server" Text='<%# Eval("Description") %>' 
TextMode="MultiLine"></asp:TextBox> 
</EditItemTemplate> 
<ItemTemplate> 
<asp:Label ID="Label2" runat="server" Text='<%# Eval("Description") %>'></asp:Label> 
</ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Priority"> 
<EditItemTemplate> 
<asp:DropDownList ID="Prior_Drop" runat="server" 
SelectedValue='<%# Eval("Priority") %>'> 
<asp:ListItem></asp:ListItem> 
<asp:ListItem>High</asp:ListItem> 
<asp:ListItem>Medium</asp:ListItem> 
<asp:ListItem>Low</asp:ListItem> 
</asp:DropDownList> 
</EditItemTemplate> 
<ItemTemplate> 
<asp:Label ID="Label3" runat="server" Text='<%# Eval("Priority") %>'></asp:Label> 
</ItemTemplate> 
</asp:TemplateField> 
<asp:CommandField HeaderText="Operation" ShowDeleteButton="True" 
ShowEditButton="True" /> 
</Columns> 
</asp:GridView> 

ответ

1

Вы либо не получаете один или все элементы управления title_txt, Desc_Txt или Prior_Drop

Проверить, если они равны нулю или нет, прежде чем обращаться к ним

Вы можете проверить перед вызовом обновления, например, th это, однако, вы должны убедиться, что это не нарушает ваш функциональные возможности какой-либо образом

if(title_txt!=null && Desc_Text!=null && Prior_Drop!=null) 
{ 
    Update_todo(id, title_txt.Text, Desc_Txt.Text, Prior_Drop.SelectedValue); 
    Show_Grid.EditIndex = -1; 
    BindData(); 
} 

Update

Ошибки вы делаете, вы получаете доступ к управлению с неправильными идентификаторами, используйте эту и он будет работать

TextBox title_txt = (TextBox)Show_Grid.Rows[e.RowIndex].FindControl("title_txt"); 
TextBox Desc_Txt = (TextBox)Show_Grid.Rows[e.RowIndex].FindControl("Desc_Txt"); 
DropDownList Prior_Drop = (DropDownList)Show_Grid.Rows[e.RowIndex].FindControl("Prior_Drop"); 
+0

Я использовал все это. Даже у меня есть ссылка в остальных функциях. –

+0

Попробуйте поставить чек и посмотреть, работает ли он. Я обновил код –

+0

У меня не было ошибок. Но не произошло никаких обновлений –

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