这是我正在构建的界面,它可以编辑数据库中的一列多行。此功能完美无缺,但在进行第一次编辑后,您无法返回并进行其他编辑。
当您选择“编辑所选项”按钮以第二次弹出面板时。该面板不会弹出。
它不会弹出的原因是因为下面的代码不再是真正的'即使GridView上的复选框仍然被选中。
if (((CheckBox)grv.FindControl("TagRowChkBx")).Checked == true)
我还没有弄清楚为什么第二次通过后检查值不再是真的。
当用户选择'保存'它在编辑面板上触发了一个执行表更新的SP。
这里是GridView定义的相关部分:
<asp:GridView ID="ActVulListGV" runat="server" OnSelectedIndexChanged="ActVulListGV_SelectedIndexChanged" PageSize="25" AlternatingRowStyle-BackColor="#ccffff" PagerSettings-PageButtonCount="25" Width="100%" AutoGenerateColumns="False" DataKeyNames="RecID" AllowPaging="True" AllowSorting="True" HeaderStyle-VerticalAlign="Bottom" HeaderStyle-BackColor="#99CCFF" HeaderStyle-ForeColor="Black" DataSourceID="Vul_DS">
<Columns>
<asp:CommandField ShowEditButton="True" ShowSelectButton="True" SelectText="Details" EditText="Edit Row"></asp:CommandField>
<asp:TemplateField HeaderText="Tag" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:CheckBox runat="server" ID="TagRowChkBx" />
</ItemTemplate>
</asp:TemplateField>
<%-- 13 addtional BoundFields -->
</Columns>
</asp:GridView>
接下来是检查要检查(或不检查)框的代码段,这样就阻止了第一次出现后面板变得可见。
protected void EditSelctedBtn_Click(object sender, EventArgs e)
{
//Read the column select drop down List into Local Varriables
String SelectedColumnItem = ColumnSelectDDL.SelectedItem.ToString();
String SelectedColumnValue = ColumnSelectDDL.SelectedValue.ToString();
List<int> EditRows = new List<int>();
List<string> recordnumber = new List<string>();
int rcounter = 0;
foreach (GridViewRow grv in ActVulListGV.Rows)
{
// Here is where 'true' becomes not true on second pass
if (((CheckBox)grv.FindControl("TagRowChkBx")).Checked == true)
{
rcounter++;
//get current row rowindex if checkbox in it is checked
EditRows.Add(grv.RowIndex);
//get the record number (RecID)
recordnumber.Add(grv.Cells[2].Text.ToString());
}
希望有人可能能够建议可能导致此问题的原因,因此我可以每页显示多次使用该功能。 谢谢,肯...
更新05/23/2017 2:20 PM美国中部:
这继续让我感到困惑。
我考虑到可能是在gridview的数据绑定期间发生的回发,以显示SP对表所做的更改。我构建了一个例程来捕获状态并在绑定完成后重新建立它。效果很好...但我仍然有同样的问题,复选框的价值没有阅读,因为他们在第二次围绕“编辑选定”&#39;按钮。
因为我只是在检查&#39; true&#39;在读取复选框的值时,我想也许我应该尝试确定实际值是什么,所以我添加了一个else,如果它是真的,否则捕获任何不是真或假(见下面的代码)。
对我也没有任何帮助!所以我给了一个断点并观察了第二次传球的情况......
我发现,只要下面第一行执行流程完全绕过了此代码的其余部分。所以不仅不是真的,它不是假的,而且它不是虚假的东西。我想我已经在C#代码中发现了暗物质!
if (((CheckBox)grv.FindControl("TagRowChkBx")).Checked == true)
{
//get current row rowindex if checkbox in it is checked
EditRows.Add(grv.RowIndex);
//get the record number (RecID)
recordnumber.Add(grv.Cells[2].Text.ToString());
}
}
else if (((CheckBox)grv.FindControl("TagRowChkBx")).Checked == false)
{
UserMessageLbl.Text = "CheckBox value = false!!!";
PopUpPnl.Visible = true;
}
else
{
UserMessageLbl.Text = "CheckBox value neither true or false = "+ (((CheckBox)grv.FindControl("TagRowChkBx")).ToString());
PopUpPnl.Visible = true;
}