在空的GridView中显示HeaderFooter

因為GridView內建修改、刪除之功能,所以很多人利用GridView的Footer列,加入控制項,作為新增的功能。但因為GridView在沒有資料的時候,除了Empty Template外,不會顯示Header和Footer列,所以新增的功能就無效了。

有人直接利用Empty Template,加入FormView或DetailView作為新增的功能,但我覺得畫面上的不一致,容易造成使用者的困擾,執意要找出利用Footer列的方式。為此用Google找了一個晚上和早上,再加上 try 了半天,終於讓我摸索出最佳答案了。

方法是在GridView的PreRender事件中,判斷 Rows.Count 是否等於0,再執行下面這個函數。這樣利用Footer列做為新增資料的功能,就萬無一失了。

不過在執行階段時,新增資料後自動重新整理本頁時,因為GridView的DataSource還是我們虛擬的DataTable,因此不會顯示新增的記錄,故需在GridView1_Load中加入一段,改回原本的SqlDataSource。

public static void renderEmptyGridView(GridView EmptyGridView, string FieldNames)
{
    //將GridView變成只有Header和Footer列,以及被隱藏的空白資料列
    DataTable dTable = new DataTable();
    char[] delimiterChars = {','};
    string[] colName = FieldNames.Split(delimiterChars);
    foreach (string myCol in colName)
    {
        DataColumn dColumn = new DataColumn(myCol.Trim());
        dTable.Columns.Add(dColumn);
    }
    DataRow dRow = dTable.NewRow();

    foreach (string myCol in colName)
    {
        dRow[myCol.Trim()] = DBNull.Value;
    }
    dTable.Rows.Add(dRow);

    EmptyGridView.DataSourceID = null;
    EmptyGridView.DataSource = dTable;
    EmptyGridView.DataBind();
    EmptyGridView.Rows[0].Visible = false;
}

        protected void GridView1_PreRender(object sender, EventArgs e)
    {
        if (GridView1.Rows.Count == 0)
        {
            renderEmptyGridView(GridView1, "FLOW_UID, FLOW_CODE, FLOW_NAME, FLOW_TYPE");
        }

    }

    protected void GridView1_Load(object sender, EventArgs e)
    {
        //回復原本GridView的資料連結
        GridView1.DataSource = null;
        GridView1.DataSourceID = "SqlDataSource1";
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值