我可能遗漏了一些简单而明显的东西。
我有一个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();
}