|
通過實踐,想出了一種辦法,主要步驟如下所示:
1) 在 GridView 的 EmptyDataView 中,放置一個普通的Html Table,以便在GridView綁定的數(shù)據(jù)源中無數(shù)據(jù)時依舊顯示表頭(如果數(shù)據(jù)源為返回的數(shù)據(jù)行數(shù)為0,GridView默認(rèn)是不顯示表頭的),假設(shè) ID 為 tbHeader,它的作用是下面用于新增功能的 tbForm 的各列控件提供說明(充當(dāng)表頭);
2)在 GridView 下面,放置一個普通的 HTML 表格,其列數(shù)和 GridView 中定義的列數(shù)保持一致,但行數(shù)只有一行,然后在此表格的各列中放入用于新增功能的各個控件(如 TextBox等),假設(shè)此表格的 ID 為 tbForm
3)在頁面中加入一段客戶端腳本,以便使頁面展示到客戶端時,利用 Javascript 將兩個表格強行合并到一起,這樣就可以將只有一行的 tbForm 合并到 GridView中,因此 GridView 的最下面多出一行,其中有 tbForm 表格中定義的輸入控件和“添加”鏈接(按鈕),主要代碼(JavaScript)如下:
function MergeTable(source,dest)
{
var row;
var cell;
var sourceTb = document.all(source);
var destTb = document.all(dest);
for (var i=0; i<sourceTb.rows.length; i++)
{
row = document.createElement("TR");
for (var j=0; j<sourceTb.rows(i).cells.length; j++)
{
cell = document.createElement("TD");
row.appendChild(cell);
//復(fù)制對象
for(k=0;k<sourceTb.rows(i).cells(j).all.length;k++)
cell.appendChild(sourceTb.rows(i).cells(j).all.item(k));
}
destTb.tBodies(0).appendChild(row);
}
for (var i=sourceTb.rows.length-1; i>=0; i--)
{
sourceTb.deleteRow(i)
}
}
function ChangeTableLayout()
{
if(document.all('tbHeader') == null)
MergeTable('tbForm','');
else
MergeTable('tbForm','tbHeader');
}
ChangeTableLayout();
如果 GridView 綁定時沒有數(shù)據(jù),將不顯示其中定義的各列,而只顯示 EmptyDataView 中的 tbHeader,這時要合并 tbHeader 和 tbForm。如果 GridView 綁定時包含數(shù)據(jù),則不會顯示 EmptyDataView(當(dāng)然也不會顯示其中的 tbHeader),但這時會顯示 GridView 中定義的各個列,因此只需將 GridView 本身和 tbForm 合并即可。 GridView 的客戶端ID可以用GridView.ClientID來獲取。
在服務(wù)器端很容易知道 GridView 綁定后是否包含數(shù)據(jù),但對于客戶端來說,不容易檢查,一個簡單的作法就是檢查頁面中有沒有 tbHeader 對象(如果有,則說明表格沒有數(shù)據(jù),如果無此對象,表示 GridView 中包含數(shù)據(jù)... 好 主站蜘蛛池模板: 台州市| 长子县| 阜新| 邢台市| 龙泉市| 海兴县| 嵩明县| 桑日县| 武冈市| 永春县| 通渭县| 桃园县| 杭锦旗| 永顺县| 建平县| 中超| 泌阳县| 眉山市| 德安县| 武乡县| 革吉县| 安化县| 通道| 田东县| 交城县| 壤塘县| 铜陵市| 如皋市| 潜江市| 广宗县| 青岛市| 工布江达县| 高雄市| 黄骅市| 庆城县| 西昌市| 闸北区| 镶黄旗| 宝兴县| 泰宁县| 南木林县|