2

我正在使用 aDetailsView来显示 a 中单行的详细信息DataTable

我在设计时知道列名,所以我AutoGenerateRows = true在标记中。

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

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

其中大约有 4 列DataView我不想DetailsView显示 - 主要是 ID 列。

我了解我应该访问 的Fields属性DataView并将相关字段设置为不可见:

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

但是,.Fields.Count始终为零。所以我得到一个索引越界异常。

当我说“始终为零”时,我的意思是.DataBind()OnDataBinding,OnDataBoundOnPreRender事件之后也是零。

但是,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 回答