【问题标题】:Only approve the row that is checked from asp gridview只批准从 asp gridview 检查的行
【发布时间】:2016-06-11 05:13:29
【问题描述】:

我有一个看起来像这样的网格视图,其中我有几行:姓名、联系人#、公司名称等,并且我已经包含了一个复选框,因此我可以选择要批准或不批准的行。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    CssClass="table table-hover table-striped" EnableViewState="False"
    onselectedindexchanged="GridView1_SelectedIndexChanged">
    <Columns>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:CheckBox ID="chkRow" runat="server" />
        </ItemTemplate>
    </asp:TemplateField>

           <asp:BoundField DataField="Username" HeaderText="Username" 
            SortExpression="Username" />

        <asp:BoundField DataField="LastName" HeaderText="LastName" 
            SortExpression="LastName" />

        <asp:BoundField DataField="FirstName" HeaderText="FirstName" 
            SortExpression="FirstName" />

        <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" 
            SortExpression="CompanyName" />

        <asp:BoundField DataField="EmailAddress" HeaderText="EmailAddress" 
            SortExpression="EmailAddress" />

        <asp:BoundField DataField="CompanyAddress" HeaderText="CompanyAddress" 
            SortExpression="CompanyAddress" />

        <asp:BoundField DataField="IncomeRange" HeaderText="IncomeRange" 
            SortExpression="IncomeRange" />

        <asp:BoundField DataField="CreditRequest" HeaderText="CreditRequest" 
            SortExpression="CreditRequest" />

        <asp:BoundField DataField="ContactNumber" HeaderText="ContactNumber" SortExpression="ContactNumber" />

        <%--<asp:TemplateField>
                <ItemTemplate>--%>


                <%--</ItemTemplate>
            </asp:TemplateField>--%>

           <asp:CheckBoxField />
           <asp:CheckBoxField />

    </Columns>

</asp:GridView>
<asp:Button ID="Button1" runat="server" Text="Approve" onclick="Button1_Click" />

我想要发生的是当我点击批准按钮时,唯一选中的行将执行后面的代码。

这是我的代码:

protected void Button1_Click(object sender, EventArgs e)
    {
        using (SqlConnection scn = new SqlConnection("Data Source = 'PAULO'; Initial Catalog=ShoppingCartDB;Integrated Security =True"))
        {
            scn.Open();
            SqlCommand cmd = new SqlCommand(@"UPDATE UserData SET CreditRequest = CAST(REPLACE(c.CreditRequest, ',', '') as int) FROM CreditRequests c INNER JOIN Userdata u on c.username=u.username Where c.Username=@Username", scn);
            cmd.Parameters.Add("@Username", SqlDbType.NVarChar).Value = DSession["New"];

            cmd.ExecuteNonQuery();
        }
    }

更新(我试过了,它没有错误但批准功能没有执行)

protected void Approve(string Username)
    {
        using (SqlConnection scn = new SqlConnection("Data Source = 'PAULO'; Initial Catalog=ShoppingCartDB;Integrated Security =True"))
        {
            scn.Open();
            SqlCommand cmd = new SqlCommand(@"UPDATE UserData SET CreditRequest = CAST(REPLACE(c.CreditRequest, ',', '') as int) FROM CreditRequests c INNER JOIN Userdata u on c.username=u.username Where c.Username=@Username", scn);
            cmd.Parameters.Add("@Username", SqlDbType.NVarChar).Value = Session["New"];

            cmd.ExecuteNonQuery();
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow grow in GridView1.Rows)
        {
            //Searching CheckBox("chkDel") in an individual row of Grid  
            CheckBox chkdel = (CheckBox)grow.FindControl("chkDel");
            //If CheckBox is checked than delete the record with particular empid  
            if (chkdel.Checked)
            {
                string Username = grow.Cells[1].Text;
                Approve(Username);
            }
        }
        //Displaying the Data in GridView  
        bindgrid(); 
    }

【问题讨论】:

    标签: c# asp.net gridview checkbox


    【解决方案1】:

    Gridview HTML 中添加DataKeyNames="ur Primary column"。 在后面的代码中,只需循环遍历 GridView 中的所有行,如下所示。

    //Loop through all the rows in gridview
    foreach (GridViewRow grv in grdEmp.Rows)
    {
    //Finiding checkbox control in gridview for particular row
    CheckBox chk = (CheckBox)grv.FindControl("chkDel");
    
    if (chk.Checked)
    {
    //get EmpId from DatakeyNames from gridview
    int empid = Convert.ToInt32(grdEmp.DataKeys[grv.RowIndex].Value);
    
    cmd = new SqlCommand("Update_Sp", con); //Put ur Inline query here
    cmd.Parameters.Add("@Username", SqlDbType.Int).Value = Username; //use as per ur requirments
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.ExecuteNonQuery();
    }
    }
    grdEmp.EditIndex = -1; 
    BindEmpGrid();
    

    【讨论】:

    • @ReineViray:尝试用string Username = GridView1.Rows[e.RowIndex].Values["Username"].ToString();替换string Username = grow.Cells[1].Text;
    【解决方案2】:

    使用此代码:

    foreach (GridViewRow row in GridView1.Rows)
    {
     if (row.RowType == DataControlRowType.DataRow)
       {
        System.Web.UI.WebControls.CheckBox chkrow = (row.Cells[0].FindControl("chkrow") as System.Web.UI.WebControls.CheckBox);
        if (chkrow.Checked)
         {
          string Username = dgvshow.Rows[row.RowIndex].Cells[1].Text.ToString()
          Approve(Username);
    
         }
      }
    }
    

    并在加载网格的页面加载中使用!ispostback

    【讨论】:

      猜你喜欢
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 2015-02-23
      • 2018-02-16
      • 1970-01-01
      相关资源
      最近更新 更多