2

問題

私はインフラジスティックスが初めてで、自分のページで webdatagrid を使用しています。私のグリッドには、フィールドの 1 つとしてチェック ボックスがあります。ヘッダー フィールドもチェック ボックスです。

ヘッダーチェックボックスのサーバー側イベント(サーバーイベントではクライアント側イベントなしでこれが必要です:))。グリッドをバインドする必要があります。

ヘッダーのチェック ボックスがオンの場合は、アクティブなレコードのみを表示する必要があり、オフの場合はすべてのレコードを表示する必要があります。

ヘッダー チェック ボックスのサーバー関数にこのロジックを実装していますが、グリッドはこのイベントにバインドされていません (つまり、値は変更されません)。

現在、この修正に 1 週​​間以上取り組んでいます。助けてください

以下のコードをご覧ください........

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 の一部のプロパティに問題があり、間違って指定した可能性があると思います。利用可能なすべての可能な回避策を実行しました。

ありがとう、サンカーディープV

4

1 に答える 1

1

最も簡単な解決策は、グリッドを再バインドするロジックをCheckChangedイベントハンドラーからPage_PreRenderイベントに移動することです。これを行うには、CheckChangedイベントが発生したかどうか、およびチェックボックスの値がページのプライベート変数にあるかどうかを保存してから、PreRenderイベントでそれらをチェックする必要があります。これは、ボタンクリックの場合と同じように機能するはずです。

于 2012-12-28T20:39:45.713 に答える