ASPxGridView
にはDataItemTemplate
の列にASPxCheckBox
が含まれています。私は、チェックボックスがオンになっているかどうかに基づいていくつかのアクションを実行するグリッドの外にボタンを持っています。ASPxGridViewでASPxCheckBoxを使用した並べ替えとDataItemTemplateを使用できます
グリッドは次のように定義される。
<dx:ASPxGridView ID="grid" runat="server">
<Columns>
<dx:GridViewDataColumn>
<DataItemTemplate>
<ds:ASPxCheckBox ID="checkbox" runat="server" />
</DataItemTemplate>
</dx:GridViewDataColumn>
<Columns>
</dx:ASPxGridView>
グリッドなどPage_Load
に移入され:
sourceTable
のように定義される
protected void Page_Load(object sender, EventArgs e)
{
//Some stuff
grid.DataSource = sourceTable;
grid.DataBind();
//Other stuff
}
:
public DataTable sourceTable
{
get
{
if (ViewState["sourceTable"] == null)
return new DataTable();
return (DataTable)ViewState["sourceTable"];
}
set
{
ViewState["sourceTable"] = value;
}
}
他の場所移入します。
コードは、さまざまなDevExpressサポートトピックで定義されているように、ソートとページングがグリッド上で正しく機能するように実装されています。これは理解できる。私たちは、ボタンのクリックにcheckbox
からChecked
値を取得しようとすると、しかし、それは常に偽です:
protected void button_Click(object sender, EventArgs e)
{
//Some stuff
for(int i = 0; i < grid.VisibleRowCount; i++)
{
//Other stuff
ASPxCheckBox checkbox = grid.FindRowCellTemplateControl(i, grid.Columns[0], "checkbox") as ASPxCheckBox;
if(checkbox.Checked) //Always false
{
//Do conditional stuff
}
//More stuff
}
//Even more stuff
}
グリッドはデータを再バインドし、デフォルトの状態にあるチェックボックスを再作成して、これは常に偽である理由を私は理解して、私はDevExpressの状態に関するPage_Load
if(!Page.IsPostBack)
のデータバインディングをラップするこの問題のために見つけたドキュメントは、実際に動作しますが、並べ替えとページングを中断します。
私が行った他のプロジェクトでこれを解決する方法があると確信しています。私はそれを見つけることができません。この場合、何をすべきか?
注:コードをできるだけ少なくしてテストしていないほど、コードを短くしました。実際のコードには小さな誤りがあるかもしれませんが、私がしようとしていることの目安として使用し、人々が遭遇する可能性のある問題を明確にします。
編集:if(!Page.IsPostBack)
またはif(!Page.IsCallback)
をPage_Load
に設定すると、グリッドの並べ替えとページングが停止するため、この条件を削除すると、Checked
は常にfalseになります。私は並べ替え/ページングの両方が発生し、DataItemTemplate
のASPxCheckBox
のChecked
の値を読み取ることができるようにする必要があります。
私はこれを試しましたが、まだ動作していません。テストでは、 'button_Click'' grid.VisibleRowCount' = 2、forループと' ASPxCheckBox checkbox = grid.FindRowCellTemplateControl(i、grid.Columns [0]、 "チェックボックス")をASPxCheckBoxとして実行すると ''ヌルです。 'grid.VisibleRowCount'をもう一度チェックして、今は0です。なぜこれが起こるのでしょうか? – anothershrubery
これは、Valehのソリューションと同じ問題があるようです。 'button_Click'では、ページが返送されてデータにリバウンドしないので、' grid.FindRowCellTemplateControl'は 'grid.GetDataRow'と同様にnullを返します。これはむしろ迷惑に見えています。 – anothershrubery
これはValehのソリューションとは関係ありません。ポストバック時には、すべてのグリッドデータが使用可能です(古いグリッドデータは再投入されません)。なぜなら、あなたは 'VisibleRowCount'を持っている理由です。この問題は、データをクライアントに送り返した後でその値を保持できないため、グリッドに再度データを入力せずにデータをサーバーに戻すときに開始されます。私はなぜあなたがnullとしてチェックボックスを得るのか分からないが、私はその別の問題を感じている。私はすぐに見ていきます –