1

我有一个表,它有一些固定的列,然后是很多动态的列,具体取决于数据透视结果的方式。

所以这很好用:

@{

    var db = Database.Open("STUDENT");
    var TeacherID = 15313;

    var selectCommand = "PBIS_ReviewBehaviors  @0, @1"; 

    var selectedData0 = db.Query(selectCommand, TeacherID, 0);
    var grid0 = new WebGrid(source: selectedData0, rowsPerPage: 30); 

    List<WebGridColumn> cols0 = new List<WebGridColumn>();

}

然后是身体:

<div>
    @grid0.GetHtml(
        tableStyle: "grid",
        headerStyle: "head",
        alternatingRowStyle: "alt"// ,
     //   columns: cols
    )
</div>

但是我真的希望能够对我的一些固定列做一些特定的事情——为了做到这一点,我需要知道谁来获取 Data0 或 Grid0 中的列名,这样我就可以建立一个名为 cols 的列表并使用它:

就像是

foreach (column name in my grid)
{
    if column name = "StudentID"

cols0.Add(grid0.column(    format: @<a href="~/InsertStudent?StudentID=@item.StudentID">Details</a>   );

else

cols0.Add(grid0.column( the column name );

}

唉,我对.net 很陌生,不知道如何获取列名列表然后专门使用它们。我希望根据我的意图使伪代码足够清晰。

4

2 回答 2

0

您可以通过GetDynamicMemberNames方法获取数据库查询返回的列。

foreach(var item in selectedData0.First().GetDynamicMemberNames()){
    // assumes that the query will always return at least one row
    // will throw an exception if not
    // 'item' represents the column name
}
于 2014-07-02T08:53:18.220 回答
0

谢谢你 !

可行的解决方案是:

try 
{    
    foreach(var i in selectedData0.First().GetDynamicMemberNames() ) 
    {
        if(i == "StudentID") {
            cols0.Add(grid0.Column(format: @<a href="~/DetailStudent?StudentID=@item.StudentID">Details</a>) );
        }
        else {
            cols0.Add(grid0.Column(i.ToString())  );
        }
    }
}
catch {}

这用指向另一个页面的链接替换了我的第一列,并将其余部分保持为返回的内容。因为可能没有返回行,所以我放入了 try/catch。

于 2014-07-02T13:07:52.797 回答