如何在gridview中使用delete命令进行更新

时间:2014-02-11 02:33:13

标签: asp.net

我有3个网页。管理员,学生和老师。我在每个页面都使用了网格视图。我的表有一个列为'status'。它的默认值为0.我想在gridview中点击删除时将此值更新为1。我写了以下代码。但它没有起作用。请帮忙。

这是.aspx文件代码 -

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TEMPRUJUConnectionString %>" 
 SelectCommand="SELECT * FROM [login] WHERE ([username] = @username)" 
 DeleteCommand="UPDATE [login] SET [status]= 1 WHERE [id]=@id" 
 InsertCommand="INSERT INTO [login] ([name], [midname], [surname], [username], [password], [contact], [dob], [email], [address], [occupation], [ltype]) VALUES (@name, @midname, @surname, @username, @password, @contact, @dob, @email, @address, @occupation, @ltype)" 
 UpdateCommand="UPDATE [login] SET [name] = @name, [midname] = @midname, [surname] = @surname, [username] = @username, [password] = @password, [contact] = @contact, [dob] = @dob, [email] = @email, [address] = @address, [occupation] = @occupation, [ltype] = @ltype WHERE [Id] = @Id">
        <DeleteParameters>
            <asp:Parameter Name="Id" Type="Int32" />
        </DeleteParameters>  

这是我背后的代码 -

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    SqlConnection con = new SqlConnection("Data Source=SNEHAL-PC\\SNEHAL1;Initial Catalog=TEMPRUJU;Integrated Security=True");
    SqlCommand cmd;
    SqlDataReader dr;
    con.Open();
    GridViewRow row = GridView1.Rows[e.RowIndex];
    cmd=new SqlCommand("Update login set status=1 where id='" + GridView1.DataKeys[e.RowIndex].Value.ToString() + "'",con);
    dr = cmd.ExecuteReader();
}

1 个答案:

答案 0 :(得分:5)

当您SqlDataSource时,您无需实施GridView1_RowDeleting

首先,您必须告诉SqlDataSource它可以找到delete command parametr(s)的值,​​在您的情况下@id ...为此,您需要设置{数据库唯一键字段名称DataKeyNames上的{1}}属性,在您的情况下为GridView ...

id

然后,要设置<asp:GridView ID="GridView1" runat="server" DataKeyNames="ID" DataSourceID="SqlDataSource1"> 上的删除命令参数,您必须告诉我,从SqlDataSource属性@id找到SelectedDataKey的值,如下所示:

GridView

最后,您需要向<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TEMPRUJUConnectionString %>" DeleteCommand="UPDATE [login] SET [status]= 1 WHERE [id]=@id"> <DeleteParameters> <asp:ControlParameter ControlID="GridView1" Name="id" PropertyName="SelectedDataKey" /> </DeleteParameters> </asp:SqlDataSource> 发送Delete命令,为此,您可以gridView enable deleteing控件添加此gridview <asp:CommandField ShowDeleteButton="True" />进入网格视图标记,或者convert this field into a TemplateFiled可以使用 _ 具有 _ CommandName属性的任何控件创建自己的模板,并设置属性(CommandName)到关键字Delete,如下所示:

<asp:LinkButton ID="LinkButton1" runat="server" CommandName="Delete" Text="Delete me"></asp:LinkButton>

这是一个Template Field的示例:

<asp:GridView ID="GridView2" runat="server" DataKeyNames="ID" DataSourceID="SqlDataSource1">
        <Columns>
            <asp:TemplateField ShowHeader="False">
                <ItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete"></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="UserID" SortExpression="UserID">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("UserID") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# Bind("UserID") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Age" SortExpression="Age">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Age") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label3" runat="server" Text='<%# Bind("Age") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:TestConnectionString %>" 
        DeleteCommand="UPDATE Profiles SET Age = Age+1 where id = @id" SelectCommand="SELECT * FROM Profiles">
        <DeleteParameters>
            <asp:ControlParameter ControlID="GridView1" Name="id" PropertyName="SelectedDataKey" />
        </DeleteParameters>
    </asp:SqlDataSource>

这是一个只有enable deleteing的示例:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDataSource1">
        <Columns>
            <asp:CommandField ShowDeleteButton="True" />
            <asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
            <asp:BoundField DataField="UserID" HeaderText="UserID" SortExpression="UserID" />
            <asp:BoundField DataField="Age" HeaderText="Age" SortExpression="Age" />
        </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TestConnectionString %>" 
        DeleteCommand="UPDATE Profiles SET Age = Age+1 where id = @id" SelectCommand="SELECT * FROM Profiles">
        <DeleteParameters>
            <asp:ControlParameter ControlID="GridView1" Name="id" PropertyName="SelectedDataKey" />
        </DeleteParameters>
    </asp:SqlDataSource>

我通过每个删除命令

在我的示例中增加age