定时?一个参数? Gridview分页上的复选框变为禁用状态

时间:2014-08-04 17:34:57

标签: c# asp.net gridview checkbox

我可能遗漏了一些简单而明显的东西。

我有一个ASP.Net页面,后面是C#代码,在这个页面上是一个需要导入计费指令的Jobs的网格视图。项目负责人告知计费部门账单,保留或注销时间。每个作业都有多行小时。 Say Job 123456有20个人正在处理它,因此可能有20个单独的时间表指令要处理。在我的gridview中,我有一个帐单职员的复选框,用于检查是否要导入这些指令,但我等待启用该复选框,直到所有行都有一个指令,因此她将导入一个完整的作业。因此,在上面的示例中,对于作业123456,如果我有20个雇员的19个指令,则复选框被禁用,并且在第20个指令出现之前无法导入作业。

在目前的状态下,此gridview中的三个页面上大约有50个作业。当它加载时,我看到第一页有18个禁用复选框,两个启用。如果我翻到第二页,然后再翻到第一页,则会禁用这两个作业。

当我设置断点并逐步执行"设置复选框"代码,我注意到,为启用/禁用复选框而评估的值来自我要离开的页面,而不是我要去的页面。如何更正错误?

以下是调用的方式:

BindImportBIsGridView();
SetCheckBoxByWBS1();

这是CheckBox代码:

protected void SetCheckBoxByWBS1()
{
    // Here we find all the WBS1s that have ALL of their PKeys in the BillingDirectives table.
    //      We don't want to import partial Jobs.  Thus we wait (disable checkbox) until ALL the PKeys for a given job are sent from IPCS.
    //      Once we have all PKeys, we enable the checkboxes for that WBS1.
    //      This code will execute every time the Gridview is populated.
    SqlConnection myConn = new SqlConnection(ConfigurationManager.ConnectionStrings["InterfaceDev"].ConnectionString);
    string myCountCommandText = "select distinct T1.WBS1 from InterfaceDev..BillingDirectiveNeeded T1 where exists (select 1 from InterfaceDev..BillingDirectives T2 where T2.PKey = T1.PKey)";
    SqlCommand myCommand = new SqlCommand(myCountCommandText, myConn);
    myConn.Open();
    SqlDataReader myReader = myCommand.ExecuteReader();

    while (myReader.Read())
    {
        string myStringValue = myReader["WBS1"].ToString();

        foreach (GridViewRow myRow in ImportBIsGridView.Rows)
        {

            Label myLabel = (Label)myRow.FindControl("JobLabel");
            if (myLabel.Text == myStringValue)
            {
                CheckBox myCheckBox = (CheckBox)myRow.FindControl("SelectedCheckBox");
                myCheckBox.Enabled = true;
            }
        }
    }
    myConn.Close();
    myCommand.Dispose();
}

这是GridView的开始:

<asp:GridView ID="ImportBIsGridView" 
    runat="server" 
    AllowPaging="True" 
    AlternatingRowStyle-BackColor="#FFFFCC" 
    ShowFooter="True" 
    DataKeyNames="WBS1" 
    BackColor="White" 
    HeaderStyle-ForeColor="White" 
    HeaderStyle-BackColor="#546E96" 
    FooterStyle-BackColor="#C3CFDD" 
    PageSize="20" 
    AutoGenerateColumns="False" 
    HorizontalAlign="Center" 
    EnableViewState="False"
    OnPageIndexChanging="ImportBIsGridView_PageIndexChanging"
    Font-Size="Small"
    >

根据Martin的请求添加代码。看起来我也需要在这里调用SetCheckBox代码?

protected void ImportBIsGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    ImportBIsGridView.PageIndex = e.NewPageIndex;
    ImportBIsGridView.DataBind();
}

0 个答案:

没有答案