如何动态获取WebGrid列名

时间:2014-07-01 19:17:01

标签: asp.net webgrid dynamic-columns

我有一个表会有一些固定的列,然后是很多动态的表,具体取决于轴的结果。

所以这很好用:

@{

    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很新,不知道如何获取我的列名列表,然后专门使用它们。我希望用我的意图使伪代码清晰。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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。