2013-10-12 89 views
1

我想更新从我的网格视图中选择的行,当我按下链接的按钮,但它不在我的工作。在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

我只是想,只有选中的行应该在数据库中受到影响。 我将非常感谢您的帮助。

+0

可以ü请从这里把你的设计(的.aspx)? –

回答

2

你需要设置你的SQL语句中的id_company_user值的更新查询。使用参数如下。

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

你需要得到以下id_company_user值检查当前行SO问题和答案,你可以使用 OnRowCommand的GridView和CommandArgument财产

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

是啊!它现在正在工作:) 只需添加字符串CompanyUserId = btn.CommandArgument; 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”,CompanyUserId); –

1

能否请你检查一次where子句,

+0

不明白? –

+1

其中id_company_user = id_company_user,这里您仅比较数据密钥名称和数据密钥名称,您需要传递参数进行比较。 – Gurunadh