维护工具界面主要采用GridView进行数据的增、删、改、显示,并且所有的数据都保存在Xml文件中,没有采用数据库对数据进行存储,所以Xml配置文件的设计需要合理的格式。
看到标题,大家也会明白GridView中采用了模板列
<ItemTemplate> 用于显示数据控件Label
<EditItemTemplate> 用于编辑和保存的时候显示控件,根据所需选择
<FooterTemplate> 用于增加的时候显示的控件,根据所需选择
大家都应该清楚,在没有数据的时候,GridView是不显示的,只会显示EmptyDataText里填写了文本。在真正做的时候确遇到了相当多问题,有记录的时候增、删、改功能不会存在什么问题,一旦没记录原本想让显示Header和Footer,但是结果却是什么都不显示,也试了好多方法,结果都不令人满意,比如:可以创建一个DataTable,添加一条空记录,重新对GridView进行填充和绑定,这样虽然显示了Header和Footer,但是空记录也随之显示了,因为我之前我给GridView增加了一列自增编号,此列就会显示1。
代码如下:
- protected DataTable GetEmptyDataGrid()
- {
- DataTable dt = new DataTable("Table1");
- //没有数据时模拟出一些原始数据绑定GridView
- dt = new DataTable();
- //dt.Columns.Add("id");
- dt.Columns.Add("csmc");//参数名称
- dt.Columns.Add("csbl");//参数变量
- dt.Columns.Add("cslx");//参数类型
- dt.Columns.Add("sfjl");//是否级联
- dt.Columns.Add("mrz");//默认值
- dt.Columns.Add("sql");//SQL填充
- DataRow dr = dt.NewRow();
- dt.Rows.Add(dr);
- dt.AcceptChanges();
- return dt;
- }
经过自己的不懈努力和网上的资料,最后总算是找到了一个解决方法,也达到了想要的结果。
在GridView的PreRender事件中,判断 Rows.Count 是否等于0,再执行函数renderEmptyGridView函数,这样也就实现了新增的功能。
具体代码如下:
- protected void GridView1_PreRender(object sender, EventArgs e)
- {
- if (GridView1.Rows.Count == 0)
- {
- renderEmptyGridView(GridView1, "csmc, csbl, cslx, sfjl, mrz, sql");
- }
- }
- 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;
- }