您的当前位置:首页ASP.NET 2.0/3.5中直接操作Gridview控件插入新记录

ASP.NET 2.0/3.5中直接操作Gridview控件插入新记录

2022-06-15 来源:比拉宠物

一、简介 从ASP.NET 2.0起引入了一批新的功能强大的视图控件,例如Gridview、FormView和DetailsView等等。通过和数据源控件的简单结合,在许多情况下,仅需要简单的配置方式就可以开发出功能强大的应用程序。但遗憾的是,Gridview控件中并没有提供像在FormView和DetailsView控件中那样直接插入新记录操作的支持。图1给出了典型的使用控件展示数据库数据的情形。

图1 使用GridView控件展示VS2005示例数据库Address表格中的数据
熟悉Gridview控件使用的朋友都知道,图1中一切都齐了,只差一个Insert操作的默认支持。我现在使用的是ASP.NET 3.5,结果一样,仍然没有直接提供对于插入操作的配置支持。二、解决方案其实,答案还是有的,这要求对于Gridview控件有更进一步的了解。我们知道Gridview为方便开发人员定制编程提供了大量的模板支持。根据插入操作的一般实现界面,我们可以利用Gridview的footer的模版功能,实现在Gridview控件的最后一行,提供一个空白行给用户输入要输入的记录,从而间接地实现Gridview控件对于插入操作的支持。三、实例展示(一)创建示例网站并建立数据库关联启动Visual Studio 2005/2008并选择“ASP.NET Web Site”模板新创建一个示例网站GridViewExt。在默认页面Default.aspx中拖入一个GridView控件。然后,点击GridView控件右上角的智能感知提示按钮,为此控件配置一个SqlDataSource类型的数据源控件SqlDataSource1。并且,通过简单的向导配置之后,使数据源控件SqlDataSource1创建与示例数据库Depart.mdf的关联,并进一步关联到其中的DepartInfo表格上。【提示】为了简化起见,示例数据库Depart.mdf中仅包含了一个表格DepartInfo,而且其架构也十分简单(其中字段DepartID为主关键字),如下图2所示:最后生成的数据源控件SqlDataSource1配置参数(经一定修改)如下所示:<asp:SqlDataSource ID="SqlDataSource1" runat="[url=javascript:;]server[/url]"           ConnectionString="<%$ ConnectionStrings:DepartConnectionString %>"           SelectCommand="SELECT DepartID, DepartName FROM DepartInfo"           DeleteCommand="Delete from DepartInfo where DepartID=@DepartID"           InsertC       >        <DeleteParameters>           <asp:Parameter Name="DepartID" Type="Int32" />        </DeleteParameters>        <InsertParameters>           <asp:Parameter Name="DepartID" Type="Int32" />           <asp:Parameter Name="DepartName" Type="String" />       </InsertParameters>        </asp:SqlDataSource>(二)修改页面Default.aspx布局我们的打算是,在让用户进行选择,当用户需要新增一记录时,便点击“添加”按钮,之后在Gridview的最后一行里,显示一个空白行,让用户按字段进行输入。当用户决定不输入新空白记录时,可以按"隐藏"按钮返回,该空白行消失。要实现以上目的,我们可以充分利用Gridview的footer的模版功能进行自定义,因为表格中仅有一个可编辑列DepartName;所以,我们只需要在此列的footer模版中,定义如下(注意其中加粗部分):<asp:Button ID="outAdd" runat="Server" Text="添加新记录" nclick="outAdd_Click" /><asp:GridView ID="GridView1" runat="server" AllowPaging="True"   AllowSorting="True" AutoGenerateColumns="False" CellPadding="4"ShowFooter =" false"   DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None"DataKeyNames="DepartID">   <FooterStyle. BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />   <RowStyle. BackC0" numbertype="1" negative="False" hasspace="False" sourcevalue="7" unitname="F" w:st="on">7F6F3" ForeColor="#333333" />   <Columns>       <asp:TemplateField ShowHeader="False">           <EditItemTemplate>               <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True"                   CommandName="Update" Text="Update"></asp:LinkButton>                <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"                   CommandName="Cancel" Text="Cancel"></asp:LinkButton>           </EditItemTemplate>           <ItemTemplate>               <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"                   CommandName="Edit" Text="Edit"></asp:LinkButton>           </ItemTemplate>           <FooterTemplate>               <asp:Button ID="btnAdd" Runat="server" Text="Add" nClick="btnAdd_Click" />                 <asp:Button ID="btnCancel" Runat="server" Text="Hide" nClick="btnCancel_Click" />           </FooterTemplate>       </asp:TemplateField>       <asp:TemplateField ShowHeader="False">           <ItemTemplate>               <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"                   CommandName="Select" Text="Select"></asp:LinkButton>           </ItemTemplate>           <ItemTemplate>               <asp:LinkButton ID="LinkButton3" runat="server" CausesValidation="true"                   CommandName="Delete" Text="Delete"></asp:LinkButton>           </ItemTemplate>       </asp:TemplateField>       <asp:BoundField DataField="DepartID" HeaderText="DepartID"           InsertVisible="False" ReadOnly="True" SortExpression="DepartID" />       <asp:TemplateField HeaderText="DepartName" SortExpression="DepartName">           <EditItemTemplate>               <asp:TextBox ID="DepartNameTextBox" runat="server" Text='<%# Bind("DepartName") %>'></asp:TextBox>           </EditItemTemplate>           <ItemTemplate>               <asp:Label ID="Label1" runat="server" Text='<%# Bind("DepartName") %>'></asp:Label>           </ItemTemplate>            <FooterTemplate>               <asp:TextBox ID="DepartNameBox" Runat="server"></asp:TextBox>            </FooterTemplate>       </asp:TemplateField>   </Columns>   <PagerStyle. BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />   <SelectedRowStyle. BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />   <HeaderStyle. BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />   <EditRowStyle. BackColor="#999999" />   <AlternatingRowStyle. BackColor="White" ForeColor="#284775" /></asp:GridView>首先注意的是,在Gridview控件之前添加了一个ASP.NET按钮“outAdd”,用于控件是否显示Gridview控件的<foottemplate>模板内容。显然,在页面启动开始时这个模板是隐藏的。因此,这个按钮的Click事件代码(位于文件Default.aspx.cx中)相当简单,如下所示:protected void outAdd_Click(object sender, EventArgs e){   GridView1.ShowFooter = true;}接下来是Gridview的有关的标记代码。可以看到,在DepartName列的<foottemplate>中提供了DepartNameBox文本框以供用户输入(因为本例中的这个字段仅是简单的文本字段,对于其它类型字段的情况,需要创建相应的ASP.NET控件进行操作)。另外,请注意在第一列的<FooterTemplate>中我们添加了Add和Hide两个按钮,它们的事件代码如下:<script. runat="server">void btnCancel_Click(object sender, EventArgs e){   GridView1.ShowFooter = false;}void btnAdd_Click(object sender, EventArgs e){   TextBox t1 = GridView1.FooterRow.FindControl("DepartNameBox") as TextBox;   SqlDataSource1.InsertParameters["DepartName"].DefaultValue = t1.Text;   SqlDataSource1.Insert();}其中的Hide按钮的事件,用来取消显示Gridview的footer模版,因此设置showfooter属性为false,而通过点击按钮Add则可以将新增的记录插入(添加)到数据库表格中去。而Add按钮,是当用户决定新增记录时点选的,此时将设置showfooter属性为true,以显示各列的foottemplate,从而达到显示新的一个空白行的目的。特别值得注意的是,在这里你必须以内联方式把按钮“Add”与“Hide”的Click事件处理器函数放置于ASPX文件之中,而不能放到代码文件Default.aspx.cs中;否则,会出现如图3所示的编译错误。
图3 把按钮“Add”与“Hide”的Click事件处理器函数放置于代码文件Default.aspx.cs中导致的编译错误提示
另外,在GridView1的属性声明中必须指定DataKeyNames="DepartID";否则,在运行时如果点击“Delete”或“Update”链接会出现“经典”的错误提示,如图4所示。
图4 未指定GridView的DataKeyNames导致的错误提示
四、观察运行结果按F5运行上面的示例页面DEFAULT.ASPX,一切顺利的话,你会观察到如图5所示的初始快照。
图5 示例页面初始快照
然后,点击“添加新记录”按钮,将出现如图6所示快照。
图6 为GRIDVIEW控件添加“插入”功能的运行示例快照
很显然,在输入部门名称后点击“Add”可以把新的部门加入到数据库表格中,而点击“Hide”按钮则可以隐藏这个页脚的显示。五、小结ASP.NET 2.0引入的Gridview控件功能相当强大,但是也存在一定的不足。本文中展示的仅仅是其中之一,而且也仅展示了为Gridview控件提示插入功能的一种方法。最后注意,虽然本文示例右VS2008下调试通过,但根据我的经验,在VS2005的ASP.NET 2.0环境下也应该没有问题。

小编还为您整理了以下内容,可能对您也有帮助:

ASP.NET 中GridView控件怎么修改添加数据?

我有个现成的完整实例:

//前台GridView
<asp:GridView ID="gv_friendlink" runat="server" AutoGenerateColumns="False"
onrowcancelingedit="gv_friendlink_RowCancelingEdit"
onrowediting="gv_friendlink_RowEditing"
onrowupdating="gv_friendlink_RowUpdating" CellPadding="4"
ForeColor="#333333" GridLines="None" Font-Names="楷体_GB2312" Font-Size="Medium"
ShowFooter="True" onrowdeleting="gv_friendlink_RowDeleting" Width="758px">
<Columns>
<asp:TemplateField>
<HeaderTemplate>网站名称</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="Labelname" runat="server" style="margin-left:10px;" Width="240" Text='<%#Eval("Fname") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtname" runat="server" style="margin-left:10px;" Width ="200px" Text='<%#Eval("Fname") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>网站完整的网址</HeaderTemplate>
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" style="margin-left:10px;" Width ="230px" NavigateUrl='<%#Eval("Furl") %>' Target="_blank"><%#Eval("Furl") %></asp:HyperLink>
<%--<asp:Label ID="Labelurl" runat="server" Text='<%#Eval("Furl") %>'></asp:Label>--%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txturl" runat="server" Text='<%#Eval("Furl") %>' ></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>优先级</HeaderTemplate>
<ItemTemplate>
<center ><asp:Label ID="Labelpriority" runat="server" Text='<%#Eval("FPriority") %>'></asp:Label></center>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtpriority" runat="server" Text='<%#Eval("FPriority") %>' ></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>   编辑  </HeaderTemplate>
<ItemTemplate>
<center><asp:Button ID="edit" runat="server" Text="编辑" CommandName="edit" /></center>
</ItemTemplate>
<EditItemTemplate>
<asp:Button ID="update" runat="server" Text="更新" CommandName="Update" />
<asp:Button ID="cancel" runat="server" Text="取消" CommandName="Cancel" />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>   删除  </HeaderTemplate>
<ItemTemplate>
<center><asp:Button ID="delete" runat="server" Text="删除" CommandName="delete" OnClientClick="return confirm('真的要删除吗?');" /></center>
</ItemTemplate>
<EditItemTemplate></EditItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" HorizontalAlign="Left" />
<EditRowStyle BackColor="#999999" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="LightGray" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>
<br />
<asp:TextBox ID="txt_fname" runat="server" Width="265px"></asp:TextBox>
 <asp:TextBox ID="txt_furl" runat="server" Width="225px"></asp:TextBox>
 
<asp:TextBox ID="txt_fpriority" runat="server" Width="85px"></asp:TextBox>
 <asp:Button ID="btn_insert" runat="server" Text="添加链接" onclick="btn_insert_Click" />

//后台代码

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
((Label)Master.FindControl("lbTitle")).Text = "友情链接管理";
bind();
}

}
protected void bind()
{
System.Data.DataSet ds = new zdxk.BLL.friendlinks().GetAllList();
gv_friendlink.DataKeyNames = new string[] { "id" };
gv_friendlink.DataSource = ds;
gv_friendlink.DataBind();
}

protected void gv_friendlink_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gv_friendlink.EditIndex = -1;
bind();
}

protected void gv_friendlink_RowEditing(object sender, GridViewEditEventArgs e)
{
gv_friendlink.EditIndex = e.NewEditIndex;
bind();
}

protected void gv_friendlink_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
try
{
zdxk.Model.friendlinks link = new zdxk.Model.friendlinks();
link.id = Convert.ToInt64(gv_friendlink.DataKeys[e.RowIndex].Value);
link.fname = ((TextBox)(gv_friendlink.Rows[e.RowIndex].FindControl("txtname"))).Text.ToString();
link.furl = ((TextBox)(gv_friendlink.Rows[e.RowIndex].FindControl("txturl"))).Text.ToString();
link.fpriority = Convert.ToInt32(((TextBox)(gv_friendlink.Rows[e.RowIndex].FindControl("txtpriority"))).Text);
if (link.fname == "" || link.furl == "" || link.fpriority <= 0)
{
MessageBox.Show(this, "优先级必须大于0,请填写完整信息!");
e.Cancel = true;
}
;
if (new zdxk.BLL.friendlinks().Update(link))
{
MessageBox.Show(this, "更新成功!");
gv_friendlink.EditIndex = -1;
bind();
}
else MessageBox.Show(this, "更新失败,请重试!");
}
catch (Exception)
{
MessageBox.Show(this,"请输入正确的内容!谢谢!"); e.Cancel = true;
}

}

protected void btn_insert_Click(object sender, EventArgs e)
{
if (txt_fname.Text == "" || txt_fpriority.Text == "" || txt_furl.Text == "")
{
MessageBox.Show(this, "请填写完整链接信息!"); return;
}
try
{
zdxk.Model.friendlinks link = new zdxk.Model.friendlinks();
link.fname = txt_fname.Text;
link.furl = txt_furl.Text;
link.fpriority = Convert.ToInt64(txt_fpriority.Text);
if (link.fpriority <= 0)
{
MessageBox.Show(this, "优先级必须大于0,请填写正确的数据!");
return;
}
if (new zdxk.BLL.friendlinks().Add(link) > 0)
{
txt_fname.Text = txt_fpriority.Text = txt_furl.Text = "";
MessageBox.Show(this, "添加成功!");
bind();
}
else
{
MessageBox.Show(this, "添加失败,请重试!");
}
}
catch
{
MessageBox.Show(this, "优先级必须大于0,请填写正确的数据!");
return;
}
}

protected void gv_friendlink_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
long Id = Convert.ToInt64(gv_friendlink.DataKeys[e.RowIndex].Value);
if (new zdxk.BLL.friendlinks().Delete(Id))
{
MessageBox.Show(this, "删除成功!");
bind();
}
else
{
MessageBox.Show(this, "删除失败,请重试!");
}
}

ASP.NET 中GridView控件怎么修改添加数据?

我有个现成的完整实例:

//前台GridView
<asp:GridView ID="gv_friendlink" runat="server" AutoGenerateColumns="False"
onrowcancelingedit="gv_friendlink_RowCancelingEdit"
onrowediting="gv_friendlink_RowEditing"
onrowupdating="gv_friendlink_RowUpdating" CellPadding="4"
ForeColor="#333333" GridLines="None" Font-Names="楷体_GB2312" Font-Size="Medium"
ShowFooter="True" onrowdeleting="gv_friendlink_RowDeleting" Width="758px">
<Columns>
<asp:TemplateField>
<HeaderTemplate>网站名称</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="Labelname" runat="server" style="margin-left:10px;" Width="240" Text='<%#Eval("Fname") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtname" runat="server" style="margin-left:10px;" Width ="200px" Text='<%#Eval("Fname") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>网站完整的网址</HeaderTemplate>
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" style="margin-left:10px;" Width ="230px" NavigateUrl='<%#Eval("Furl") %>' Target="_blank"><%#Eval("Furl") %></asp:HyperLink>
<%--<asp:Label ID="Labelurl" runat="server" Text='<%#Eval("Furl") %>'></asp:Label>--%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txturl" runat="server" Text='<%#Eval("Furl") %>' ></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>优先级</HeaderTemplate>
<ItemTemplate>
<center ><asp:Label ID="Labelpriority" runat="server" Text='<%#Eval("FPriority") %>'></asp:Label></center>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtpriority" runat="server" Text='<%#Eval("FPriority") %>' ></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>   编辑  </HeaderTemplate>
<ItemTemplate>
<center><asp:Button ID="edit" runat="server" Text="编辑" CommandName="edit" /></center>
</ItemTemplate>
<EditItemTemplate>
<asp:Button ID="update" runat="server" Text="更新" CommandName="Update" />
<asp:Button ID="cancel" runat="server" Text="取消" CommandName="Cancel" />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>   删除  </HeaderTemplate>
<ItemTemplate>
<center><asp:Button ID="delete" runat="server" Text="删除" CommandName="delete" OnClientClick="return confirm('真的要删除吗?');" /></center>
</ItemTemplate>
<EditItemTemplate></EditItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" HorizontalAlign="Left" />
<EditRowStyle BackColor="#999999" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="LightGray" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>
<br />
<asp:TextBox ID="txt_fname" runat="server" Width="265px"></asp:TextBox>
 <asp:TextBox ID="txt_furl" runat="server" Width="225px"></asp:TextBox>
 
<asp:TextBox ID="txt_fpriority" runat="server" Width="85px"></asp:TextBox>
 <asp:Button ID="btn_insert" runat="server" Text="添加链接" onclick="btn_insert_Click" />

//后台代码

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
((Label)Master.FindControl("lbTitle")).Text = "友情链接管理";
bind();
}

}
protected void bind()
{
System.Data.DataSet ds = new zdxk.BLL.friendlinks().GetAllList();
gv_friendlink.DataKeyNames = new string[] { "id" };
gv_friendlink.DataSource = ds;
gv_friendlink.DataBind();
}

protected void gv_friendlink_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gv_friendlink.EditIndex = -1;
bind();
}

protected void gv_friendlink_RowEditing(object sender, GridViewEditEventArgs e)
{
gv_friendlink.EditIndex = e.NewEditIndex;
bind();
}

protected void gv_friendlink_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
try
{
zdxk.Model.friendlinks link = new zdxk.Model.friendlinks();
link.id = Convert.ToInt64(gv_friendlink.DataKeys[e.RowIndex].Value);
link.fname = ((TextBox)(gv_friendlink.Rows[e.RowIndex].FindControl("txtname"))).Text.ToString();
link.furl = ((TextBox)(gv_friendlink.Rows[e.RowIndex].FindControl("txturl"))).Text.ToString();
link.fpriority = Convert.ToInt32(((TextBox)(gv_friendlink.Rows[e.RowIndex].FindControl("txtpriority"))).Text);
if (link.fname == "" || link.furl == "" || link.fpriority <= 0)
{
MessageBox.Show(this, "优先级必须大于0,请填写完整信息!");
e.Cancel = true;
}
;
if (new zdxk.BLL.friendlinks().Update(link))
{
MessageBox.Show(this, "更新成功!");
gv_friendlink.EditIndex = -1;
bind();
}
else MessageBox.Show(this, "更新失败,请重试!");
}
catch (Exception)
{
MessageBox.Show(this,"请输入正确的内容!谢谢!"); e.Cancel = true;
}

}

protected void btn_insert_Click(object sender, EventArgs e)
{
if (txt_fname.Text == "" || txt_fpriority.Text == "" || txt_furl.Text == "")
{
MessageBox.Show(this, "请填写完整链接信息!"); return;
}
try
{
zdxk.Model.friendlinks link = new zdxk.Model.friendlinks();
link.fname = txt_fname.Text;
link.furl = txt_furl.Text;
link.fpriority = Convert.ToInt64(txt_fpriority.Text);
if (link.fpriority <= 0)
{
MessageBox.Show(this, "优先级必须大于0,请填写正确的数据!");
return;
}
if (new zdxk.BLL.friendlinks().Add(link) > 0)
{
txt_fname.Text = txt_fpriority.Text = txt_furl.Text = "";
MessageBox.Show(this, "添加成功!");
bind();
}
else
{
MessageBox.Show(this, "添加失败,请重试!");
}
}
catch
{
MessageBox.Show(this, "优先级必须大于0,请填写正确的数据!");
return;
}
}

protected void gv_friendlink_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
long Id = Convert.ToInt64(gv_friendlink.DataKeys[e.RowIndex].Value);
if (new zdxk.BLL.friendlinks().Delete(Id))
{
MessageBox.Show(this, "删除成功!");
bind();
}
else
{
MessageBox.Show(this, "删除失败,请重试!");
}
}

如何使用最简便的方式实现GridView下的插入/新建数据操作

本文中我将举例说明快速解决这个问题的方法。
介绍几个月前我写了一篇文章,是讲述一个允许你在DataGrid里添加一条新记录的技巧。 GridView控件不允许你插入新记录。 这种情况下开发人员经常使用如下的技术增加新记录:
·他们在GridView的下面放置一个DetailsView控件。 用户可以通过DetailsView增加新记录,然后这条新记录就会显示在GridView里。
·他们通过一个超级链接使用户连接到另一个使用DetailsView增加新记录的web form。 一旦记录被添加后就会返回之前的页。
这些方法都有它们自己的缺点。 第一种方法占用了太多的屏幕空间,即使你增加的只是很少的记录。 所以它不是“主要用于编辑,偶尔增加记录”情况下的好的选择。 第二种选择需要额外创建一个web form,因为来回导航会需要向服务器发送更多的请求。 本文中我将举例说明快速解决这个问题的方法。解决方案
GridView控件提供了一个被称作Empty Data Template的模板。当GridView里没有数据显示的时候这个模板就会显示出来。 一般在没有数据显示的时候,这个模板会被用于显示一个给出示给用户的状态信息。 但是,你也可以为了别的目的而是用它。 本例中,你将使用它来给GridView增加新的记录。
新建一个Web Form示例
开始先在Visual Studio中新建一个web站点。 拖拽一个SQL数据源控件并配置它以从Northwind数据库的Customers表中选择出CustomerID、CompanyName、ContactName和Country列。确保选择了“高级”按钮,并且选中“生成INSERT、UPDATE和DELETE语句”复选框。(一定要设置数据的主键,否则该功能无法实现)现在,在你的web form里添加一个GridView控件,设置它的DataSourceID属性为SqlDataSource1。 启用这个GridView的编辑、删除和分页。 在GridView的智能标签中选择“编辑列…”选项。在GridView中增加一个ButtonField,并设置它的CommandName属性为Insert。 用户通过单击插入按钮来增加新的记录。 现在右键单击GridView选择编辑模板 – Empty Data Template菜单选项。 拖拽DetailsView控件到Empty Data Template内,设置它的DataSourceID属性为SqlDataSource1。 同时设置它的DefaultMode属性为Insert。当Empty Data Template显示的时候,DetailsView将会做好插入记录之前的准备。
现在来到web form的后置代码中写出GridView的RowCommand事件处理的代码,出示如下:(DataSourceID=“”;不能实现前面代码数据分页功能,所以应为DataSourceID=null;)protectedvoid GridView1_RowCommand(object sender, GridViewCommandEventArgs e){if (e.CommandName =="Insert"){GridView1.DataSourceID ="";
GridView1.DataBind();
}} 这里我们检查了GridViewCommandEventArgs的CommandName是否是“Insert”。 如果我们设置了GridView的DataSourceID属性为空,然后调用GridView的DataBind()方法的话, 那么GridView将不会有任何数据,从而显示Empty Data Template。
现在我们来处理DetailsView控件的ItemInserted事件。当DetailsView成功的插入了一条新记录的时候,这个ItemInserted事件就会被触发。 在ItemInserted事件内写出如下代码:(实际操作的时候写得是Get_Sql();)protectedvoid DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e){GridView1.DataSourceID ="SqlDataSource1";
GridView1.DataBind();
}这里我们再次设置了GridView的DataSourceID属性为SqlDataSource1,然后再次绑定它。 这样GridView就可以显示出最新插入的记录。 总结
1、GridView控件不允许你插入新的记录。 但是,通过它的Empty Data Template的帮助和DetailsView控件,你就可以有一个插入新记录的非常棒的方法。 用这种方法你可以节省屏幕空间,也不需要再用额外的页了。

如何使用最简便的方式实现GridView下的插入/新建数据操作

本文中我将举例说明快速解决这个问题的方法。
介绍几个月前我写了一篇文章,是讲述一个允许你在DataGrid里添加一条新记录的技巧。 GridView控件不允许你插入新记录。 这种情况下开发人员经常使用如下的技术增加新记录:
·他们在GridView的下面放置一个DetailsView控件。 用户可以通过DetailsView增加新记录,然后这条新记录就会显示在GridView里。
·他们通过一个超级链接使用户连接到另一个使用DetailsView增加新记录的web form。 一旦记录被添加后就会返回之前的页。
这些方法都有它们自己的缺点。 第一种方法占用了太多的屏幕空间,即使你增加的只是很少的记录。 所以它不是“主要用于编辑,偶尔增加记录”情况下的好的选择。 第二种选择需要额外创建一个web form,因为来回导航会需要向服务器发送更多的请求。 本文中我将举例说明快速解决这个问题的方法。解决方案
GridView控件提供了一个被称作Empty Data Template的模板。当GridView里没有数据显示的时候这个模板就会显示出来。 一般在没有数据显示的时候,这个模板会被用于显示一个给出示给用户的状态信息。 但是,你也可以为了别的目的而是用它。 本例中,你将使用它来给GridView增加新的记录。
新建一个Web Form示例
开始先在Visual Studio中新建一个web站点。 拖拽一个SQL数据源控件并配置它以从Northwind数据库的Customers表中选择出CustomerID、CompanyName、ContactName和Country列。确保选择了“高级”按钮,并且选中“生成INSERT、UPDATE和DELETE语句”复选框。(一定要设置数据的主键,否则该功能无法实现)现在,在你的web form里添加一个GridView控件,设置它的DataSourceID属性为SqlDataSource1。 启用这个GridView的编辑、删除和分页。 在GridView的智能标签中选择“编辑列…”选项。在GridView中增加一个ButtonField,并设置它的CommandName属性为Insert。 用户通过单击插入按钮来增加新的记录。 现在右键单击GridView选择编辑模板 – Empty Data Template菜单选项。 拖拽DetailsView控件到Empty Data Template内,设置它的DataSourceID属性为SqlDataSource1。 同时设置它的DefaultMode属性为Insert。当Empty Data Template显示的时候,DetailsView将会做好插入记录之前的准备。
现在来到web form的后置代码中写出GridView的RowCommand事件处理的代码,出示如下:(DataSourceID=“”;不能实现前面代码数据分页功能,所以应为DataSourceID=null;)protectedvoid GridView1_RowCommand(object sender, GridViewCommandEventArgs e){if (e.CommandName =="Insert"){GridView1.DataSourceID ="";
GridView1.DataBind();
}} 这里我们检查了GridViewCommandEventArgs的CommandName是否是“Insert”。 如果我们设置了GridView的DataSourceID属性为空,然后调用GridView的DataBind()方法的话, 那么GridView将不会有任何数据,从而显示Empty Data Template。
现在我们来处理DetailsView控件的ItemInserted事件。当DetailsView成功的插入了一条新记录的时候,这个ItemInserted事件就会被触发。 在ItemInserted事件内写出如下代码:(实际操作的时候写得是Get_Sql();)protectedvoid DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e){GridView1.DataSourceID ="SqlDataSource1";
GridView1.DataBind();
}这里我们再次设置了GridView的DataSourceID属性为SqlDataSource1,然后再次绑定它。 这样GridView就可以显示出最新插入的记录。 总结
1、GridView控件不允许你插入新的记录。 但是,通过它的Empty Data Template的帮助和DetailsView控件,你就可以有一个插入新记录的非常棒的方法。 用这种方法你可以节省屏幕空间,也不需要再用额外的页了。

ASP.NET入门教程 8.3 添加新记录[1]

    添加新记录 在SQL术语叫做INSERT或INSERT INTO 和修改已存在的记录几乎一样简单 主要的差别在于GrjdView不支持添加新记录 对此我们稍后再作考虑

    如前所述 必须在数据控件中进行 处修改 首先 在数据源控件的Create New Data Source向导中找到Advanced按钮 单击该按钮并在弹出的对话框中勾选Genexate INSERT UPDATE and DELETE复选框以获得 条SQL语句 这个操作将在数据源控件中添加两项内容 第一项内容是InsertCommand本身 第二项内容是INSERT参数集 (实际上 同时还创建了UPDATE和DELETE命令及参数 但本节只介绍INSERT命令)

    对于数据绑定控件 需要在它的Common Tasks面板中勾选Enable Inserting复选框以激活插入功能 该操作会产生两个结果 一是增加了一个显示ShowInsertButton的<asp:mandfield>标记 该标记将与ShowEditButton和ShowDeleteButton并存 如果己选择了它们的话 ShowInsertButton激活了插入新记录的功能 与其他CommonField按钮一样 当该控件切换到INSERT 模式的时候 ShowInsertButton会自动隐藏起来并显示其他按钮(Insert和Cancel)

    GridView的情况比较特殊 因为它不直接支持增加新的记录 最常见的方法是在GridView中显示已存在的记录并在该控件上创建一个按钮 单击这个按钮会跳转到一个DetailsView控件(可以在相同页面 也可以在另一个页面) 然后可以在INSERT模式下打开这个DetailsView控件 准备接受新记录的数据 在INSERT模式下打开该控件需要设置它的DefaultMode属性

    与编辑数据的时候一样 对数据进行一些是可以接受的 例如 如果正在添加一个新的比赛报告 那么所评论的比赛必须和某条比赛记录匹配 毕竟 不能去评论一场根本就没有进行的比赛 与编辑的情况一样 为了减少这类冲突可以为用户提供一组可能的选项 而不是让用户输入 如果必须输入的话 那么一定要使用验证控件对所输入的值进行验证

   ASP NET 入门教程完整版  

lishixin/Article/program/net/201311/14526

ASP.NET在gridview中动态添加行,行中有下拉列表,并保证原有数据不变

首先你要明确的是gridview的显示数据全部是从数据源里查出来的

不管是DataSource还是一个List还是DataTable

所以你想改变前边的显示数据就必须要改变数据源(用js实现除外)

假设你的数据源是List(对象名:list)

1.添加一行:

从页面中获得新值的数据(放几个文本框手动输入)

点一个按钮时

实例化一个对像(你数据的封装对象)

比如叫UserInfo

UserInfo

newUser

=

new

UserInfo();

newUser.Name

=

"获得文本框的值";

newUser.Address

=

"获得文本框的值";

list.Add(newUser);

BindMethod();//绑定数据的方法

2.删除数据:

比如你想删除第二行

当点击按钮时要把2传给方法或都保证能从后台获取到

list.RemoveAt(2);//2是获取到的

BindMethod();

不知道是不是这个意思

比拉宠物还为您提供以下相关内容希望对您有帮助:

ASP.NET入门教程 8.3 添加新记录[1]

对于数据绑定控件 需要在它的Common Tasks面板中勾选Enable Inserting复选框以激活插入功能 该操作会产生两个结果 一是增加了一个显示ShowInsertButton的&lt;asp:mandfield&gt;标记 该标记将与ShowEditButton和ShowDeleteButton并存 如果己选择了它们的话 ShowInsertButton激活了插入新记录的功能 与其他CommonField按钮一样...

判断题: 1. 在Dreamweaver进行网页设计时,不允许对图像的局部区域添加...

18.如果把GridView控件绑定到SqlDataSource上,则可以利用GridView控件插入新记录。对 19.不论数据表是否定义了主键,利用FormView都可以直接修改数据表的记录。20.ASP.NET依托的Web服务器是Tomcat,需要.Net Framework的支持。对

asp.net的版本历史

成为.NET Framework的一部分。 提供支持LINQ的 LinqDataSource 控件。 2008年8月11日3.5SP1于 Visual Studio 2008 Service Pack 1 发布内含ASP .NET Dynamic Data 在 ASP .NET AJAX 应用程序中支持浏览器历史控制 (

C#和ASP.NET的习题

string str = "***";for (int i = 10; i &gt; 0; i--){ Response.Write(str.Substring(0, i) + "");}

commandField用法步骤、急急急、高分

ShowInsertButton 在 CommandField 字段中显示或隐藏“新建”按钮。“新建”按钮允许用户在数据源中插入新记录。当用户单击“新建”按钮时,该按钮将由“插入”按钮和“取消”按钮代替。所有其他命令按钮也将被隐藏。注意 此属性只应用于支持插入操作的数据绑定控件,如 DetailsView 控件。ShowSelectButton 对于...

21天学通ASP.NET的目录

12.5.1 LINQ插入操作12.5.2 更新操作12.5.3 删除操作12.6 综合练习12.7 小结12.8 习题第13章 使用水晶报表(教学视频:161分钟)13.1 Web报表入门13.1.1 创建和使用ASP.NET报表13.1.2 创建和使用Excel报表13.1.3 水晶报表与其他报表的比较13.2 水晶报表13.2.1 水晶报表的简介13.2.2 配置水晶报表的开发环境13.2.3 ...

Microsoft .NET Framework 4包括3.5和2.0和.1.1吗???

o 针对新的 AJAX 库改进的 Web 窗体支持,包括对内容传递网络 (CDN) 的内置支持。o 有关 ASP.NET 的增强功能的完整列表,请转到此处。Windows Presentation Foundation (WPF) 的改进 o 添加对 Windows 7 多点触控、功能区控件和任务栏扩展性功能的支持。o 添加了对 Surface 2.0 SDK 的支持。o ...

visual studio 都有哪几个版本 现在最新版是哪个? 最好用的是哪个?求...

当我们选择像datalist 或者gridview 控件中的一行时,如果我们移动到另一个网页,在新的页上,它选择同编号行,虽然我们只在第一页选择了它。 为了避免这个,ASP,Net 4.0为这些控件推出了一种新的属性,这是EnablePersistedSelection。如果设置为true,在其他网页中,将不能选择同一编号。例如,导航到原始网页,第一页将显示...

microslft.netframework2.0是什么?

这些认证方法已经完全集成到ASP.NET中了。 在ASP.NET窗体认证中,用户提供证书,并提交窗体。如果应用程序簦别请求,系统发送一个cookie ,该cookie以某种形式包含包含了证书或包含重新获得身份的关键字。接下来发送的请求在头中包含了cookie,ASP.NET处理程序通过应用程序所期望的任何有效方法对这些请求认证和授权。如果请求...

如何制作ASP.NET分页控件

http://bbs.topsage.com/dispbbs.asp?boardID=123&amp;ID=156135Telerik RadTreeView for ASP.NET 2.0 v6.2.2.0http://bbs.topsage.com/dispbbs.asp?boardID=123&amp;ID=156134Telerik RadTabStrip for ASP.NET 2.0 v3.5.2.0http://bbs.topsage.com/dispbbs.asp?boardID=123&amp;ID=156132Telerik RadToolbar for ASP....

Top