更新Gridview中的选定行

时间:2013-10-12 05:15:52

标签: c# asp.net gridview

当我按下链接按钮时,我想从网格视图中仅更新选定的行,但它不能用于我的结束。

这是我的设计页面

<asp:GridView ID="grdCompanyUsers" runat="server"
   DataKeyNames="id_company_user,nm_company_username"
   AutoGenerateColumns="false" GridLines="None" CssClass="grid" AlternatingRowStyle-
   BackColor="#DDE0EF" OnRowDataBound="grdCompanyUsers_DataBound">
  <Columns>
  <asp:TemplateField>
  <EditItemTemplate>
  <asp:ImageButton ID="imgbtnCancel" runat="server" CommandName="Cancel" ImageUrl="~/Images
  /Cancel.jpg" ToolTip="Cancel" Height="20px" Width="20px" />
  </EditItemTemplate>
  <ItemTemplate>
  <asp:Label ID="CompUserID" runat="server" Width="15"  
   Text='<%#Eval("id_company_user")%>'> </asp:Label>
  </ItemTemplate>
  </asp:TemplateField>
  <asp:TemplateField>
  <ItemTemplate>
  <asp:Label ID="companyusername" runat="server" Width="51" 
   Text='<%#Eval("nm_company_username")%>'></asp:Label>
   </ItemTemplate>
   </asp:TemplateField>
   <asp:TemplateField>
   <ItemTemplate>
   <asp:Label ID="compName" runat="server" Width="56" Text='<%#Eval("nm_company_name")%>'>
   </asp:Label>
   </ItemTemplate>
   </asp:TemplateField>
   <asp:TemplateField>
   <ItemTemplate>
   <asp:Label ID="compDesc" runat="server" Width="129" Text='<%#Eval("nm_company_desc")%>'>
   </asp:Label>
   </ItemTemplate>
   </asp:TemplateField>
   <asp:TemplateField>
   <ItemTemplate>
   <asp:Label ID="compEmail" runat="server" Width="103px" 
    Text='<%#Eval("nm_company_email_address")%>'></asp:Label>
    </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
    <ItemTemplate>
    <asp:Label ID="compAddress" runat="server" Width="153px" 
     Text='<%#Eval("nm_company_address")%>'></asp:Label>
    </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
    <ItemTemplate>
    <asp:CheckBox ID="chkBoxStatus" runat="server" Width="15px" Enabled="false" 
     Text='<%#Eval("ind_active")%>'>
    </asp:CheckBox>
    </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
    <ItemTemplate>
    <asp:LinkButton ID="btnEdit" runat="server" Font-Underline="false" 
     CommandArgument='<%#Eval ("id_company_user")%>'
     OnClick="btnEdit_Click">Edit</asp:LinkButton>
    </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
    <ItemTemplate>
    <asp:LinkButton runat="server" ID="lnkDeny" Font-Underline="false" CommandName="Deny" 
     CommandArgument='<%# Eval("id_company_user") %>'
     OnClick="btnDeny_Click">Deny</asp:LinkButton>
    </ItemTemplate>
    </asp:TemplateField>
    </Columns>
    </asp:GridView>

这是aspx页面背后的代码

protected void btnEdit_Click(object sender, EventArgs e)
  { 
       LinkButton btn = (LinkButton)sender;
       GridViewRow row = (GridViewRow)btn.NamingContainer;
        int i = Convert.ToInt32(row.RowIndex);
       _connString = ConfigurationManager.AppSettings["connString"];
       using (SqlConnection conn = new SqlConnection(_connString))
             {
                conn.Open(); 
                SqlCommand cmd = new SqlCommand("update ref_registration_company_user 
                set ind_active=1 where id_company_user=id_company_user", conn);
                cmd.ExecuteNonQuery();
                conn.Close();
            }      

   }

这是设计视图:

enter image description here

我只是想在数据库中只影响选定的行。 我将非常感谢你的帮助。

3 个答案:

答案 0 :(得分:2)

您需要在sql语句中设置id_company_user值。使用如下参数。

SqlCommand cmd = new SqlCommand("update ref_registration_company_user set ind_active=1 where id_company_user=@id_company_user", conn);
cmd.Parameters.AddWithValue("@id_company_user", id);

你需要获得当前行id_company_user值检查下面的问题和答案,你可以使用 GridView的OnRowCommandCommandArgument属性

GridView: Get datakey of the row on button click

<asp:GridView ID="grdCompanyUsers" runat="server" DataKeyNames="id_company_user,nm_company_username" AutoGenerateColumns="false" GridLines="None" CssClass="grid" AlternatingRowStyle-BackColor="#DDE0EF" OnRowDataBound="grdCompanyUsers_DataBound" 
       OnRowCommand="myGridView_RowCommand">
     <Columns>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:LinkButton ID="btnEdit" runat="server" Font-Underline="false" CommandArgument='<%#Eval ("id_company_user")%>' CommandName="Edit">Edit</asp:LinkButton>
        </ItemTemplate>
    </asp:TemplateField>
     </Columns>
</asp:GridView>

代码隐藏:

protected void myGridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
    var id= int.Parse(e.CommandArgument);
    _connString = ConfigurationManager.AppSettings["connString"];
    using (SqlConnection conn = new SqlConnection(_connString))
    {
        conn.Open(); 
        using(SqlCommand cmd = new SqlCommand("update ref_registration_company_user set ind_active=1 where id_company_user=id_company_user", conn))
        {
           cmd.Parameters.AddWithValue("@id_company_user", id);
           cmd.ExecuteNonQuery();
        }
    }  
}

答案 1 :(得分:1)

你可以检查一下你的更新查询where子句,

答案 2 :(得分:0)

检查sqlDataSource控件是否存在此问题,您可以添加select和update命令来填充和更新GridView的行。

也许这个例子对你有用 http://asp-net-example.blogspot.mx/2008/12/aspnet-gridview-and-sqldatasource.html

相关问题