2

问题

我是基础设施的新手,我在我的页面中使用 webdatagrid。我的网格有一个复选框作为字段之一。标题字段也是一个复选框。

在标头复选框的服务器端事件中(我需要在服务器事件中没有客户端事件:))。我需要绑定网格。

如果选中标题复选框,我只需要显示活动记录,如果未选中,我需要显示所有记录。

我正在标题复选框的服务器功能中实现此逻辑,并且在此事件中网格未绑定(即值未更改)。

我正在为这个修复工作一个多星期。请帮忙

请看下面的代码............

ASPX

<ig:WebDataGrid ID="WebDataGrid1" runat="server" EnableDataViewState="true" ViewStateMode="Enabled" Height="100%" Width="100%" AutoGenerateColumns="False" OnColumnSorted="WebDataGrid1_ColumnSorted" DataKeyFields="Id">
<Columns>
<ig:BoundDataField DataFieldName="Id" Hidden="True" Key="Id">
<Header Text="BoundColumn_0" />
</ig:BoundDataField>
<ig:BoundDataField DataFieldName="Name" Key="Name">
<Header Text="Name"></Header>
</ig:BoundDataField>
<ig:BoundDataField DataFieldName="ShortName" Key="ShortName">
<Header Text="ShortName"></Header>
</ig:BoundDataField>
<ig:BoundDataField DataFieldName="IsoCode" Key="IsoCode">
<Header Text="IsoCode"></Header>
</ig:BoundDataField>
<ig:TemplateDataField Key="IsActive" Header-Text="IsActive">
<HeaderTemplate>
<asp:CheckBox ID="chkChildIsActive" runat="server" Checked="true" 
Text="IsActive" AutoPostBack="True" 
oncheckedchanged="chkChildIsActive_CheckedChanged">
</asp:CheckBox>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkHIsActive" runat="server" Checked='<%# DataBinder.Eval(((Infragistics.Web.UI.TemplateContainer)Container).DataItem, "IsActive") %>'>
</asp:CheckBox>
</ItemTemplate>
<Header Text="IsActive" />
</ig:TemplateDataField>
</Columns>
<ClientEvents Click="WebDataGrid1_SingleClick" DoubleClick="WebDataGrid1_DoubleClick" />
<Behaviors>
<ig:Paging PageSize="15" QuickPages="9">
<PagerTemplate>
<uc1:CustomerPagerControl ID="CustomerPager" runat="server" />
</PagerTemplate>
</ig:Paging>
<ig:Sorting>
</ig:Sorting>
<ig:RowSelectors>
</ig:RowSelectors>
<ig:Selection RowSelectType="Single" CellClickAction="Row" CellSelectType="None">
</ig:Selection>
</Behaviors>
</ig:WebDataGrid>

ASPX.cs

// 页面加载绑定数据到网格

protected void Page_Load(object sender, EventArgs e)

{
if (!IsPostBack)
{
List<Port> port = PortManager.PortListTestPaging(true);
WebDataGrid1.DataSource = port;
WebDataGrid1.DataBind();
}
}



//Checkbox Event

protected void chkChildIsActive_CheckedChanged(object sender, EventArgs e)
{

CheckBox chkChildIsActive = (CheckBox)sender;

List<Port> port = PortManager.PortListTestPaging(chkChildIsActive.Checked);

WebDataGrid1.DataSource = port;
WebDataGrid1.DataBind();

}

我从 Infragistics 论坛尝试的修复:

  1. EnableDataViewState = false :如果我们将此属性赋予网格,那么在复选框事件中,网格的所有数据都会被清除(并且不会触发复选框事件)。

  2. EnableDataViewState = true 和 WebDataGrid1.ClearDataSource(): 然后我在复选框事件“找到具有相同 ID 'xyz0_4' 的多个控件”时出现以下错误我已经通过以下链接进行修复但失败。http://www.infragistics.com/community/forums/p/65065/329361.aspx

  3. WebDataGrid1.Rows.Clear() & //WebDataGrid1.Columns.Clear() :两者都不起作用。

  4. 我想知道问题出在哪里,所以对带有按钮的按钮事件尝试了相同的代码,并且它起作用了。所以我认为我可能错误地给出了 webdatagrid 中的一些属性的一些问题。我已经完成了所有可能的工作。

谢谢,桑卡迪普五世

4

1 回答 1

1

最简单的解决方案是将重新绑定网格的逻辑从 CheckChanged 事件处理程序移动到 Page_PreRender 事件。为此,您需要存储是否触发了 CheckChanged 事件以及复选框的值在页面的私有变量中,然后在 PreRender 事件中检查它们。这应该与您在单击按钮时所做的相同。

于 2012-12-28T20:39:45.713 回答