【问题标题】:Update Selected Row in Gridview更新 Gridview 中的选定行
【发布时间】:2013-10-12 05:15:51
【问题描述】:

当我按下链接按钮时,我只想从我的网格视图中更新选定的行,但它在我这边不起作用。

这是我的设计页面

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

   }

这是设计视图:

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

【问题讨论】:

  • 你能把你的设计(.aspx)放在这里吗?

标签: c# asp.net gridview


【解决方案1】:

您需要在 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下面的值检查所以问题和答案,你可以使用 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();
        }
    }  
}

【讨论】:

  • 是的!它现在可以工作了:) 只需添加字符串 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);
【解决方案2】:

能否请您检查一下您的更新查询 where 子句,

【讨论】:

  • where id_company_user=id_company_user,这里只比较数据键名和数据键名,需要传参数比较。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多