【发布时间】:2013-01-02 12:23:08
【问题描述】:
在此处输入代码我在GridView 模板中有一个CheckBox。当检查CheckBox 时,它应该将列值发送到存储过程,并在另一个gridview 中显示所需的结果。
选中两个复选框时,应在其他GridView中显示两列的值。
我的问题是单击第二个复选框会删除第一个复选框的值,并导致仅第二个复选框的值显示在另一个网格视图中。
protected void ChkRule_CheckedChanged(object sender, EventArgs e)
{
StringCollection sc = new StringCollection();
for (int i = 0; i < gdYojnaDtl.Rows.Count; i++)
{
string yojnaNo = "";
CheckBox chl = (CheckBox)gdYojnaDtl.Rows[i].Cells[0].FindControl("CheckBox1");
//CheckBox chl = (CheckBox)sender;
if (chl != null)
{
if (chl.Checked == true)
{
int rowsNo = (Convert.ToInt16(chl.ToolTip) - 1);
yojnaNo = ((Label)gdYojnaDtl.Rows[rowsNo].FindControl("lblYojnaNo")).Text;
sc.Add(yojnaNo);
}
}
}
foreach (string obj in sc)
{
objyojnadetail4.YojnaNo = obj;
DataTable city = objyojnadetail4.Selectcity();
gdCityDetail.DataSource = city;
gdCityDetail.DataBind();
}
}
<Columns>
<asp:TemplateField HeaderText="Scheme Code">
<ItemTemplate>
<asp:Label ID="lblYojnaNo" runat="server" Text='<%#Eval("Yojna_No")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Scheme Name">
<ItemTemplate>
<asp:Label ID="lblYojnaName" runat="server" Text='<%#Eval("Yojna_Name")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Assistant Name">
<ItemTemplate>
<asp:Label ID="lblAsstName" runat="server" Text=' <%#Eval("Asst_Name")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Select for City">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true"
oncheckedchanged="ChkRule_CheckedChanged"
ToolTip="<%#Container.DataItemIndex+1 %> " CommandName="cbCity"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
【问题讨论】:
-
您是否在来自
Page_Load的回发中重新加载GridView?使用这个:if(!Page.IsPostBack) DataBindGrid();. -
@tim 数据没有通过你的解决方案绑定到网格视图中
-
它应该可以工作,因为
ViewState默认是启用的。如果您在每次回发时重新加载网格,您可以防止触发事件并覆盖更改的值(例如CheckBox.Checked)。 -
我无法发布我的代码,但您的解决方案不起作用
-
@user1942107 Tim 是对的,您从头开始制作一些 DataBing 和 Grid 如何呈现它,或者您禁用了视图状态。如果您无法发布代码,您可以在空白页面上制作一个具有相同问题的简单工作示例,然后将其发布在这里(同样的问题)