Asp.net 如何动态获取WebGrid列名

Asp.net 如何动态获取WebGrid列名,asp.net,webgrid,dynamic-columns,Asp.net,Webgrid,Dynamic Columns,我有一个表,它有几个固定的列,然后有很多动态的列,这取决于pivot的结果 所以这很好: @{ var db = Database.Open("STUDENT"); var TeacherID = 15313; var selectCommand = "PBIS_ReviewBehaviors @0, @1"; var selectedData0 = db.Query(selectCommand, TeacherID, 0); var grid0

我有一个表,它有几个固定的列,然后有很多动态的列,这取决于pivot的结果

所以这很好:

@{

    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>();

}
@{
var db=Database.Open(“学生”);
var-TeacherID=15313;
var selectCommand=“PBIS\u ReviewBehaviors@0,@1”;
var selecteddata=db.Query(selectCommand,TeacherID,0);
var grid0=新的WebGrid(来源:selectedData0,行页面:30);
List cols0=新列表();
}
然后是身体:

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

@grid0.GetHtml(
表样式:“网格”,
头型:“头”,
交替行样式:“alt”//,
//列:cols
)
但是,我真的希望能够对我的一些固定列执行一些特殊操作-为了做到这一点,我需要知道谁可以在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 );

}
foreach(我的网格中的列名)
{
如果column name=“StudentID”
cols0.Add(grid0.column,格式:@);
其他的
cols0.Add(grid0.column)(列名);
}

唉,我对.net非常陌生,不知道如何获得列名列表,然后具体使用它们。我希望我的意图足够清楚地说明伪代码。

您可以通过该方法获得数据库查询返回的列

谢谢大家!

可行的解决办法是:

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 {}
试试看
{    
foreach(selectedData0.First().GetDynamicMemberNames()中的变量i)
{
如果(i==“学生ID”){
cols0.Add(grid0.Column(格式:@));
}
否则{
cols0.Add(grid0.Column(i.ToString());
}
}
}
捕获{}

这将我的第一列替换为指向另一页的链接,并将其余列保持为返回内容的动态。因为可能没有返回行,我将其放入try/catch中。

而不是
try-catch
,您可以测试null:
如果(selectedData0.FirstOrDefault()!=null)
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 {}