2

DetailsViewからの単一行の詳細を表示するために を使用していDataTableます。

設計時には列名がわからないAutoGenerateRows = trueので、マークアップに入れています。

DataView dv = myDataTable.AsDataView();
dv.RowFilter = string.Format("ResourceID = {0}", resourceId);

dvScoresBreakdown.DataSource = dv;
dvScoresBreakdown.DataBind();

DataViewには、表示したくない列が約 4 つありDetailsViewます。主に ID 列です。

FieldsのプロパティにアクセスしDataView、関連するフィールドを非表示に設定する必要があることを理解しています。

dvScoresBreakdown.Fields[0].Visible = false;
dvScoresBreakdown.Fields[1].Visible = false;

ただし、.Fields.Countは常にゼロです。そのため、インデックスの範囲外の例外が発生します。

.DataBind()「常にゼロ」とは、OnDataBinding、 、OnDataBound、およびOnPreRenderイベントの直後でゼロであることを意味します。

ただし、DetailsView はページにレンダリングされ、すべて (元のすべての列) がDataView表示されるため、データビューはバインドされます。

私は何を間違っていますか?

4

2 に答える 2

5

その方法は、メソッドの直後に行を削除することです.DataBind()

dvScoresBreakdown.DataSource = dv;
dvScoresBreakdown.DataBind();

dvScoresBreakdown.Rows[0].Visible = false;
dvScoresBreakdown.Rows[1].Visible = false;

これが他の誰かを助けることを願っています!

于 2012-09-12T10:27:58.663 に答える
-1

Columns コレクションは、明示的に宣言された列のみを格納するため、自動生成された列を使用している場合、カウントはゼロになります。自動生成された列を使用している場合、データバインド後に行コレクションをループして、次のように適切なセルを非表示にすることができます。

dvScoresBreakdown が GridView の場合

 dvScoresBreakdown .DataBind();
if (dvScoresBreakdown .Columns.Count > 0)
    dvScoresBreakdown .Columns[0].Visible = false;
else
{
    dvScoresBreakdown .HeaderRow.Cells[0].Visible = false;
    foreach (GridViewRow gvr in dvScoresBreakdown .Rows)
    {
        gvr.Cells[0].Visible = false;
    }
}

これが役立つと思います。

于 2012-09-12T10:17:58.063 に答える