【问题标题】:Updation Not Done inside Gridbox. Exception Handling ErrorGridbox 内未完成更新。异常处理错误
【发布时间】:2016-05-25 08:38:12
【问题描述】:

我在网格框中进行了编辑/更新/删除/取消。所有功能都运行良好。除了更新。

当我点击时,我收到一条错误提示,

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 描述,DropDown 为优先级。 我在这一行得到错误

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>

【问题讨论】:

    标签: c# asp.net .net gridview


    【解决方案1】:

    您没有获得title_txtDesc_TxtPrior_Drop 中的一个或所有控件

    在访问它们之前检查它们是否为空

    您可以在像这样调用更新之前进行检查,但是您必须确保它不会以任何方式破坏您的功能

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

    更新

    您正在做的错误是,您正在访问具有错误 ID 的控件,使用它,它会工作

    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");
    

    【讨论】:

    • 这些我都用过。即使我在其余功能中都有参考
    • 试试看它是否有效。我更新了代码
    • 您确定您尝试访问的控件位于正在更新的行中吗?发布您的网格视图标记
    • &lt;asp:GridView ID="Show_Grid" runat="server" AutoGenerateColumns="False" DataKeyNames="id" onrowcancelingedit="Show_Grid_RowCancelingEdit" onrowdeleting="Show_Grid_RowDeleting" onrowediting="Show_Grid_RowEditing" onrowupdating="Show_Grid_RowUpdating"&gt;
    • &lt;asp:TemplateField HeaderText="Title"&gt; &lt;EditItemTemplate&gt; &lt;asp:TextBox ID="title_txt" runat="server" Text='&lt;%# Eval("Title") %&gt;'&gt;&lt;/asp:TextBox&gt; &lt;/EditItemTemplate&gt; &lt;ItemTemplate&gt; &lt;asp:Label ID="Label1" runat="server" Text='&lt;%# Eval("Title") %&gt;'&gt;&lt;/asp:Label&gt; &lt;/ItemTemplate&gt; &lt;/asp:TemplateField&gt;
    猜你喜欢
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    相关资源
    最近更新 更多