无法获取更新面板中 GridView 的复选框值
Not able to fetch Check Box value of GridView which is in Update Panel
我有一个如下所述的 GridView
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="gvResult" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="chkAll" runat="server" onclick="checkAll(this);" />
Remove Lists
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chk" runat="server" onclick="Check_Click(this)" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
当我尝试获取按钮上复选框的值时,单击它总是 return false 即使选中了复选框
下面是我的按钮点击事件
protected void btnDeleteLists_Click(object sender, EventArgs e)
{
string str = string.Empty;
foreach (GridViewRow gvrow in gvResult.Rows)
{
CheckBox chk = (CheckBox)gvrow.FindControl("chk");
if (chk != null & chk.Checked)
{
//Some Code
}
}
}
页面加载事件
protected void Page_Load(object sender, EventArgs e)
{
cmdSearch.Text = "Search " + rbSearch.SelectedValue;
if (SessionUtilities.Current_UserType != "3")
{
gvResult.Columns[gvResult.Columns.Count - 3].Visible = false;
}
try
{
if (Request.QueryString["ListType"].ToString().Trim() == "SL") ListType = 2;
if (Request.QueryString["ListType"].ToString().Trim() == "DSL") ListType = 3;
}
catch { }
if (ListType == 2) ListTypeString = "Suppression";
if (ListType == 3) ListTypeString = "Default Suppression";
SessionUtilities.SetTabHeadingDesc("List", ListTypeString + " List Summary", "View summary of your created lists");
this.Title = "(View List) " + System.Configuration.ConfigurationManager.AppSettings["Page_Title"].ToString();
//if (!IsPostBack && !Is)
//{
BindResultGridView();
//}
newDt = GetAllLists();
}
所以我哪里错了?
您可能应该使用 gridview 的 prerender 事件或 rowdatabound 事件来获取更新面板中的复选框值
而不是
//if (!IsPostBack && !Is) //{ BindResultGridView(); //}
只需使用 if
(!IsPostBack) { BindResultGridView(); }
即可。
说明:-
如果您在页面处于回发阶段时在页面加载中再次绑定 gridview,它将丢失您上次所做的更改。它将重新初始化整个gridview,因此您的代码将无法工作。
我有一个如下所述的 GridView
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="gvResult" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="chkAll" runat="server" onclick="checkAll(this);" />
Remove Lists
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chk" runat="server" onclick="Check_Click(this)" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
当我尝试获取按钮上复选框的值时,单击它总是 return false 即使选中了复选框
下面是我的按钮点击事件
protected void btnDeleteLists_Click(object sender, EventArgs e)
{
string str = string.Empty;
foreach (GridViewRow gvrow in gvResult.Rows)
{
CheckBox chk = (CheckBox)gvrow.FindControl("chk");
if (chk != null & chk.Checked)
{
//Some Code
}
}
}
页面加载事件
protected void Page_Load(object sender, EventArgs e)
{
cmdSearch.Text = "Search " + rbSearch.SelectedValue;
if (SessionUtilities.Current_UserType != "3")
{
gvResult.Columns[gvResult.Columns.Count - 3].Visible = false;
}
try
{
if (Request.QueryString["ListType"].ToString().Trim() == "SL") ListType = 2;
if (Request.QueryString["ListType"].ToString().Trim() == "DSL") ListType = 3;
}
catch { }
if (ListType == 2) ListTypeString = "Suppression";
if (ListType == 3) ListTypeString = "Default Suppression";
SessionUtilities.SetTabHeadingDesc("List", ListTypeString + " List Summary", "View summary of your created lists");
this.Title = "(View List) " + System.Configuration.ConfigurationManager.AppSettings["Page_Title"].ToString();
//if (!IsPostBack && !Is)
//{
BindResultGridView();
//}
newDt = GetAllLists();
}
所以我哪里错了?
您可能应该使用 gridview 的 prerender 事件或 rowdatabound 事件来获取更新面板中的复选框值
而不是
//if (!IsPostBack && !Is) //{ BindResultGridView(); //}
只需使用 if
(!IsPostBack) { BindResultGridView(); }
即可。
说明:- 如果您在页面处于回发阶段时在页面加载中再次绑定 gridview,它将丢失您上次所做的更改。它将重新初始化整个gridview,因此您的代码将无法工作。