如何向一个绑定空数据源的GridView添加数据呢,要是添加一个DetailsView或一个Repeater那就容易办了。可那样会影响页面的美观度和性能,最后我决定用GridView的EmptyDataTemplate和FooterRow来完成这个任务。废话少说下面来看看到底怎么做
如何向一个绑定空数据源的GridView添加数据呢,要是添加一个DetailsView或一个Repeater那就容易办了。可那样会影响页面的美观度和性能,最后我决定用GridView的EmptyDataTemplate和FooterRow来完成这个任务。废话少说下面来看看到底怎么做,呵呵。
首先看一下完成后的界面:

第一步创建数据源并绑定,代码如下:
protected void GetTableInfo()
{
DataTable dtTableInfo = new DataTable("TableInfo");
dtTableInfo.Columns.Add("ColumnName", Type.GetType("System.String"));
dtTableInfo.Columns.Add("DataType", Type.GetType("System.String"));
dtTableInfo.Columns.Add("Length", Type.GetType("System.String"));
dtTableInfo.Columns.Add("IsNull", Type.GetType("System.Boolean"));
dtTableInfo.Columns.Add("Desc", Type.GetType("System.String"));
dtTableInfo.Columns.Add("Control", Type.GetType("System.String"));
dtTableInfo.Columns.Add("CtlColSpan", Type.GetType("System.Int32"));
dtTableInfo.Columns.Add("Sort", Type.GetType("System.Int32"));
dtTableInfo.Constraints.Add("PK_TableInfo", dtTableInfo.Columns[0], true);
DataRow dr = dtTableInfo.NewRow();
dr.BeginEdit();
dr[0] = txtTableName.Text.Trim() + "ID";
dr[1] = "int";
dr[2] = "4";
dr[3] = "true";
dr[4] = "主键";
dr[5] = "";
dr[6] = 1;
dr[7] = 1;
dtTableInfo.Rows.Add(dr);
dr.EndEdit();
ViewState["TableInfo"] = dtTableInfo;
}
protected void BindData()
{
DataTable TableInfo = (DataTable)ViewState["TableInfo"];
gvTableField.DataSource = TableInfo;
gvTableField.DataBind();
gvTableField.Rows[0].Enabled = false;
SetDdlField();
}
第二步编辑GridView的EmptyDataTemplate 根据个人需要可以在里边直接写Html和定义CSS,下边是一段示例代码:记得把添加按钮的CommandName设为你想要的名字这里为EmptyInsert
<EmptyDataTemplate>
<table border="1" cellspacing="0" cellpadding="0" style=" border-collapse:collapse;width:100%;
border-left-color: #A9C1E2; border-bottom-color: #A9C1E2; border-top-color: #A9C1E2;
border-right-color: #A9C1E2;" align="center">
<tr>
<td>
<table border="1" bordercolor="#ffffff" align="center" cellpadding="0" cellspacing="0" style="width:100%;border-collapse: collapse;">
<tr>
<td align="center" style="height:25px;widht:10%; background:url(../Skin/blues/images/Title_bg.jpg)">
列名
</td>
<td align="center" style="height:25px;widht:40%; background:url(../Skin/blues/images/Title_bg.jpg)">
错误信息
</td>
<td align="center" style="height:25px;widht:40%; background:url(../Skin/blues/images/Title_bg.jpg)">
表达式
</td>
<td align="center" style="height:25px;widht:40%; background:url(../Skin/blues/images/Title_bg.jpg)">
添加
</td>
</tr>
<tr>
<td align="center" style="height: 30px">
<asp:Label ID="Label1" runat="server" Text='<%# Bind("FieldName") %>'></asp:Label></td>
<td align="center" style="height: 30px">
<asp:TextBox ID="TextBox2" runat="server" Width="90%"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvErrorMessage" runat="server" ControlToValidate="TextBox2"
Display="None" ErrorMessage="错误信息不允许为空,请输入!" ValidationGroup="3"></asp:RequiredFieldValidator></td>
<td align="center" style="height: 30px">
<asp:TextBox ID="TextBox3" runat="server" Width="90%"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvExpr" runat="server" ControlToValidate="TextBox3"
Display="None" ErrorMessage="表达式不允许为空,请输入!" ValidationGroup="3"></asp:RequiredFieldValidator></td>
<td align="center" style="height: 30px">
<asp:LinkButton ID="lbtnAdd" runat="server" CausesValidation="True" CommandName="EmptyInsert"
Text="添加" ValidationGroup="3"></asp:LinkButton></td>
</tr>
</table>
</td>
</tr>
</table>
</EmptyDataTemplate>
第三步设置GridView的ShowFooter为True 并在编辑模版,放入需要的控件。添加按钮的CommandName设为Insert。
第四步,插入信息。点击添加按钮时会触发GridView的RowCommand事件我们在里边进行插入操作。
protected void gvValidator_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Insert" && Page.IsValid)
{
DataTable dt = (DataTable)ViewState["Validator"];
DataRow dr = dt.NewRow();
dr.BeginEdit();
GridViewRow gvr = gvValidator.FooterRow;
dr[0] = ddlField.SelectedValue;
string str = ((TextBox)gvr.FindControl("TextBox2")).Text;
dr[1] = str;
str = ((TextBox)gvr.FindControl("TextBox3")).Text;
dr[2] = str;
dr.EndEdit();
dt.Rows.Add(dr);
gvAttribute.EditIndex = -1;
BindValidator();
}
if (e.CommandName == "EmptyInsert" && Page.IsValid)
{
DataTable dt = (DataTable)ViewState["Validator"];
DataRow dr = dt.NewRow();
dr.BeginEdit();
TableRow tr = (TableRow)(gvValidator.Controls[0].Controls[0]);
dr[0] = ddlField.SelectedValue;
dr[1] = ((TextBox)tr.FindControl("TextBox2")).Text;
dr[2] = ((TextBox)tr.FindControl("TextBox3")).Text;
dr.EndEdit();
dt.Rows.Add(dr);
gvAttribute.EditIndex = -1;
BindValidator();
}
} 到这里就完成操作了。由于表达能力有限如果我写的不够明白希望大哥大姐多多指教, 呵呵
点击这里下载完整代码/Files/hongyuniu/FormDesigner.rar

浙公网安备 33010602011771号