单击一个按钮可以执行两个操作:加载和选中gridview中的复选框

本文关键字:加载 复选框 操作 gridview 按钮 一个 单击 执行 两个 | 更新日期: 2023-09-27 18:27:21

当前场景

第一个操作:使用传递给sqldatasource中Select comman的sql查询加载gridview中的数据。(使用过程按钮-执行查询功能)

第二个操作:当该行的日期也存在于另一个表-折扣表中时,选中每行网格视图中的复选框(USING RECOMPUTE BUTTON-CheckApproveDisc函数)

这是代码:

    protected void btnProcess_Click(object sender, EventArgs e)
            }
                executeQuery();
            }

 protected void btnRecompute_Click(object sender, EventArgs e)
    {
        CheckApproveDisc();
    }

   public void executeQuery()
            {
                 if ((ddlLoc.SelectedValue == "ALL LOCATIONS") && (ddlRP.SelectedValue == "PER RETAIL PARTNER"))
                {
                    if (txtSearchedRP.Text == "")
                    {
                        string script = "alert('"Please select a Retail Partner'");";
                        ScriptManager.RegisterStartupScript(this, GetType(),
                                              "ServerControlScript", script, true);
                    }
                    else
                    {
                        dstrQuery = @"select a.tenantcode,   b.name , convert(varchar(10), a.date, 101) as Date, datename(weekday, a.date) as Day,
                                convert(varchar,cast(SUM(a.surcharge ) as money),1) AS Surcharge, 
                                convert(varchar,cast(SUM(a.senior)  as money),1) as senior, 
                                convert(varchar,cast((((SUM(a.senior))/0.20)*0.80)  as money),1) as VATExemptSales,
                                convert(varchar,cast(SUM(a.other)  as money),1) as Other, 
                                convert(varchar,cast(SUM(a.refund)  as money),1)as Refund, 
                                convert(varchar,cast(SUM(a.void)  as money),1) as Void, 
                                case when a.date IN (select Z.date from discount z where z.date between '"+ txtdatefrom.Text  +"' and '"+ txtdateto.Text  +"' and z.tenantcode = '" + hdnRP.Value + "') THEN (convert(varchar,cast(((sum(a.cash) + SUM(a.charge) + SUM(a.gift)) - (SUM(a.surcharge))) as money),1) ) ELSE convert(varchar,cast(((sum(a.cash) + SUM(a.charge) + SUM(a.gift)+ SUM(a.other)) - (SUM(a.surcharge))) as money),1) end as GSC, convert(varchar,cast(SUM(a.cash ) as money),1) as Cash, convert(varchar,cast(SUM(a.charge ) as money),1) as Charge, convert(varchar,cast(SUM(a.gift ) as money),1) as Gift from  TENANT b inner join LOCATION c on b.location=c.location inner join DAILY a on a.tenantcode=b.tenantcode   where (a.date between '" + txtdatefrom.Text + "' and '" + txtdateto.Text + "')  and (a.tenantcode = '" + hdnRP.Value + "') GROUP BY a.tenantcode, b.name, a.date order by  a.date ";

                        sqlDataSourceDSRTender.SelectCommand = dstrQuery;

                    }
                }
                CheckApproveDisc();
            }

--

 public void CheckApproveDisc()
    {
        int RecordCount = 0;
        string datepass;

        foreach (GridViewRow row in grdDSTR.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                CheckBox chkRow = (row.Cells[0].FindControl("chkCheckRow") as CheckBox);
                try
                {
                    datepass = (row.Cells[2].Text);
                    DateTime dt = Convert.ToDateTime(datepass);
                    string queryString = "select COUNT(*) from DISCOUNT Where date = '" + dt + "' and tenantcode = '" + hdnRP.Value + "'";

                    SqlCommand cmd = new SqlCommand(queryString, con);
                    con.Open();
                    RecordCount = Convert.ToInt32(cmd.ExecuteScalar());
                    if (RecordCount == 1)
                    {
                        chkRow.Checked = true;
                    }
                    con.Close();
                }

                catch (Exception)
                {
                    Response.Write("Something wrong happened");
                }
            }
        }
    }

我想要实现的目标

要在一个按钮中执行两个操作,请仅单击。我尝试在Process Button中包含两个函数,但它不起作用,可能是因为系统还没有加载网格视图数据,所以迭代过程、测试每一行都不起作用。

有其他方法或替代方案可以实现这一点吗?

--

更新

我认为这是部分答案,但它不是100%准确的,我在复选框中包含了数据绑定属性(请参阅下面的代码)。这里剩下的问题是最后一行没有检查或没有对gridview 的最后一行生效

<asp:GridView ID="grdDSTR" runat="server" DataSourceID="sqlDataSourceDSRTender" EmptyDataText="No Records Found" 
                         ShowHeaderWhenEmpty="True" AllowPaging="True" AutoGenerateColumns="False" BackColor="White" BorderColor="#DEDFDE" 
                        BorderStyle="None" BorderWidth="1px" CellPadding="4" ForeColor="Black" GridLines="Vertical" width="100%" Font-Size="Smaller" PageSize="31"  >
                        <emptydatarowstyle backcolor="white" forecolor="black"/> <emptydatatemplate> No Data Found.</emptydatatemplate> 
                         <AlternatingRowStyle BackColor="White" />
                        <Columns>

                    <asp:TemplateField>
       <ItemTemplate>
        <asp:CheckBox ID="chkCheckRow" runat="server" OnDataBinding="btnProcess_Click"  />
       </ItemTemplate>
                           <HeaderTemplate>
                                <asp:CheckBox ID="ckhCheckAll" runat="server" onclick="GridSelectAllColumn(this);" />
                            </HeaderTemplate>
                         </asp:TemplateField>

单击一个按钮可以执行两个操作:加载和选中gridview中的复选框

"一键执行两个操作"?我建议你试试BackgroundWorker。要了解如何在web应用程序上使用BackgroundWorker,请参阅此问题。或者很重要。在要使用backgroundworker的页面上添加Async="true",如下所示。如果你正在使用桌面应用程序,你不需要这行代码。

<%@ Page Language="C#" AutoEventWireup="true" ... Inherits="_Default" Async ="true" %>

///

protected void btnProcess_Click(object sender, EventArgs e)
{
    BackgroundWorker w = new BackgroundWorker();
    w.DoWork += new DoWorkEventHandler(doWork)
    w.RunWorkerCompleted += new RunWorkerCompletedEventHandler(workComplete);
     if (w.IsBusy != true)
      {
          // Start the asynchronous operation.
           w.RunWorkerAsync();
       }
    }
    protected void doWork(object sender, DoWorkEventArgs e)
    {
       //Put your  executeQuery(); here 
      if ((ddlLoc.SelectedValue == "ALL LOCATIONS") && (ddlRP.SelectedValue == "PER RETAIL PARTNER"))
           {
                if (txtSearchedRP.Text == "")
                   {
                       string script = "alert('"Please select a Retail Partner'");";
                       ScriptManager.RegisterStartupScript(this,       
                                     GetType(),"ServerControlScript",script, true);
                    }
                  else
                    {
                       dstrQuery = @"select a.tenantcode,   b.name , convert(varchar(10), a.date, 101) as Date, datename(weekday, a.date) as Day,
                                    convert(varchar,cast(SUM(a.surcharge ) as money),1) AS Surcharge, 
                                    convert(varchar,cast(SUM(a.senior)  as money),1) as senior, 
                                    convert(varchar,cast((((SUM(a.senior))/0.20)*0.80)  as money),1) as VATExemptSales,
                                    convert(varchar,cast(SUM(a.other)  as money),1) as Other, 
                                    convert(varchar,cast(SUM(a.refund)  as money),1)as Refund, 
                                    convert(varchar,cast(SUM(a.void)  as money),1) as Void, 
                                    case when a.date IN (select Z.date from discount z where z.date between '"+ txtdatefrom.Text  +"' and '"+ txtdateto.Text  +"' and z.tenantcode = '" + hdnRP.Value + "') THEN (convert(varchar,cast(((sum(a.cash) + SUM(a.charge) + SUM(a.gift)) - (SUM(a.surcharge))) as money),1) ) ELSE convert(varchar,cast(((sum(a.cash) + SUM(a.charge) + SUM(a.gift)+ SUM(a.other)) - (SUM(a.surcharge))) as money),1) end as GSC, convert(varchar,cast(SUM(a.cash ) as money),1) as Cash, convert(varchar,cast(SUM(a.charge ) as money),1) as Charge, convert(varchar,cast(SUM(a.gift ) as money),1) as Gift from  TENANT b inner join LOCATION c on b.location=c.location inner join DAILY a on a.tenantcode=b.tenantcode   where (a.date between '" + txtdatefrom.Text + "' and '" + txtdateto.Text + "')  and (a.tenantcode = '" + hdnRP.Value + "') GROUP BY a.tenantcode, b.name, a.date order by  a.date ";

                            sqlDataSourceDSRTender.SelectCommand = dstrQuery;

                        }
                    } 
      //Bind your gridview.
    }
    protected void workComplete(object sender, RunWorkerCompletedEventArgs e)
    {
       //This event is called when the dowork complete
       CheckApproveDisc();
    }

BAckgroundworker是一个强大的阶层。它已成功更改事件。您可以将您的所有信息和进度(如string script = "alert('"Please select a Retail Partner'");";)带到这里。你的网格也可以根据进度变化或只是在工作中进行绑定。一切完成后,您可以在workercomplete方法中执行复选框检查事件。这是一个功能强大的类,请检查msdn页面和上面提到的链接。

更新

至于上面的OndataBinding事件,如果最后一行没有更新,那就很清楚了。可能是recordcount在最后一行不等于1。在那里放置一个断点,然后查看。可能是您的查询在最后一行返回空。情况可能就是这样。放一个断点看看。