我傳遞與System.DataTable
,並從該html table
呈現一個視圖。列的可見性因login
而異。過濾DataTable中的列?
(即)考慮有5列作爲colA
,colB
,colC
,colD
,colE
和這些列可視性每個登錄而變化。有些登錄只有colA
,部分colA
和colD
有的都。
下面是對上述需求量的
sql procedure
將返回所有這些列有bit
場列每列顯示/隱藏列在這樣的視圖正常工作的落實。
colA
,isColA
,colB
,isColB
等
過濾實際上明星在這裏controller
DataTable dt = "Method here that will generate datatable";
var cols = new string[] { "colA", "isColA", "colB", "isColB", "colC", "isColC" and so on };
var colsRemove = new List<string> { };
for(int i=0; i < cols.Length; i +=2)
{
colsRemove.Add(dt.Columns[cols[i + 1]].ToString());
if(!dt.Rows[0][cols[i + 1]].Equals(true))
{
colsRemove.Add(dt.Columns[cols[i]].ToString());
colsRemove.Add(dt.Columns[cols[i + 1]].ToString());
}
}
var newDt = new DataTable();
newDt = dt.Clone();
foreach(var item in colsRemove)
{
newDt.Columns.Remove(item);
}
foreach (DataRow row in dt.Rows)
{
newDt.ImportRow(row);
}
這工作得很好,這裏是我的實際問題,
- 是否實施是一個標準的實踐è?
- 有沒有達到這個要求,任何其他簡單的方法?
標準的做法是修改用於生成DataTable中的SQL,以便只有所需的列都包含在查詢中。你的方法可以工作,但效率不高,因爲每個登錄都會返回所有列,無論它們是否被使用。但是,你已經在效率低下的一個世界,因爲你使用的是數據表生成HTML(這不會是一個高容量的網站一個很好的設計)。 – MusiGenesis