zoukankan      html  css  js  c++  java
  • ASP.NET2.0中用Gridview控件操作数据

      在ASP.NET 2.0中,加入了许多新的功能和控件,相比asp.net 1.0/1.1,在各方面都有了很大的提高。其中,在数据控件方面,增加了不少控件,其中的Gridview控件功能十分强大。在本文中,将探讨Gridview控件中的一些功能特性和用法,如果各位读者对Gridview控件不大了解,可以通过《使用ASP.NET 2.0中的Gridview控件》一文,来对Gridview控件有个初步的认识。
      
      1、使用Gridview插入新记录
      
      在Gridview控件中,可以实现插入新记录的操作(见《使用ASP.NET 2.0中的Gridview控件》)一文,但如果想实现在Gridview中,实现在Gridview控件的最后一行,提供一个空白行给用户输入要输入的记录,那无疑是很方便的。下面将介绍其实现方法。
      
      首先,我们打算在让用户进行选择,当用户需要新增一记录时,便点击新增按钮,之后在Gridview的最后一行里,显示一个空白行,让用户按字段进行输入,如下图所示:
      
      当用户决定不输入新空白记录时,可以按"cancel"按钮返回,该空白行消失。要实现这样的效果,我们可以充分利用Gridview的footer的模版功能进行自定义,因为有3列,所以,在每一列的footer模版中,定义如下:
      
      <asp:Gridview ID="Gridview1" Runat="server" DataSourceID="SqlDataSource1" DataKeyNames="CustomerID" AutoGenerateColumns="False" ShowFooter="True">
      <Columns>
      <asp:TemplateField>
      <ItemTemplate>
      <asp:Label ID="CustomerIDLabel" Runat="Server"><%# Eval("CustomerID") %></asp:Label>
      </ItemTemplate>
      <FooterTemplate>
      <asp:TextBox ID="CustomerIDTextBox" Runat="server"></asp:TextBox>
      </FooterTemplate>
      </asp:TemplateField>
      
      <asp:TemplateField>
      <ItemTemplate>
      <asp:Label ID="CompanyNameLabel" Runat="Server"><%# Eval("CompanyName") %></asp:Label>
      </ItemTemplate>
      <FooterTemplate>
      <asp:TextBox ID="CompanyNameTextBox" Runat="server"></asp:TextBox>
      </FooterTemplate>
      </asp:TemplateField>
      
      <asp:TemplateField>
      <FooterTemplate>
      <asp:DropDownList ID="ContactTitleDropDownList" Runat="server" DataSourceID="SqlDataSource2" DataTextField="ContactTitle" DataValueField="ContactTitle">
      </asp:DropDownList>
      <asp:SqlDataSource ID="SqlDataSource2" Runat="server" SelectCommand="SELECT DISTINCT [ContactTitle] FROM [Customers]"
      ConnectionString="server=localhost;uid=sa;password=xxx;database=northwind">
      </asp:SqlDataSource>
      
      <asp:Button ID="Button1" Runat="server" Text="Add" OnClick="Button1_Click" />
      <asp:Button ID="CancelButton1" Runat="server" Text="Cancel" OnClick="CancelButton1_Click" />
      </FooterTemplate>
      
      <ItemTemplate>
      <asp:DropDownList ID="ContactTitleDropDown" SelectedValue=’<%# Bind("ContactTitle") %>’ Runat="Server" DataSourceID="SqlDataSource3" DataTextField="ContactTitle" DataValueField="ContactTitle" ></asp:DropDownList>
      <asp:SqlDataSource ID="SqlDataSource3" Runat="server" SelectCommand="SELECT DISTINCT [ContactTitle] FROM [Customers]"
      ConnectionString="server=localhost;uid=sa;password=xxxx;database=northwind" EnableCaching="True">
      </asp:SqlDataSource>
      </ItemTemplate>
      </asp:TemplateField>
      </Columns>
      </asp:Gridview>
      
      以上为Gridview的代码,可以看到,在第一,二列的<foottemplate>列中,分别提供了customerid和companyname两个文本框以供用户输入,在第三列的<footertemplate>列中,以dropdownlistbox的形式来显示contracttitle.。其中,请注意第三列的footertemplate中的add和cancel两个按钮的,它们的事件代码如下
      
      
    <script runat="server"
      
    void CancelButton1_Click(object sender, EventArgs e)
      
    {
      Gridview1.ShowFooter 
    = false;
      }

      
    void AddButton1_Click(object sender, EventArgs e)
      
    {
      Gridview1.ShowFooter 
    = true;
      }

      
      
    //点add按钮时,将新增的记录更新到数据库中去
      void Button1_Click(object sender, EventArgs e)
      
    {
      TextBox customerID 
    = Gridview1.FooterRow.FindControl("CustomerIDTextBox"as TextBox;
      TextBox companyName 
    = Gridview1.FooterRow.FindControl("CompanyNameTextBox"as TextBox;
      DropDownList ContactTitle 
    = Gridview1.FooterRow.FindControl("ContactTitleDropDownList"as DropDownList;
      SqlDataSource1.InsertParameters[
    "CustomerID"].DefaultValue = customerID.Text;
      SqlDataSource1.InsertParameters[
    "CompanyName"].DefaultValue = companyName.Text;
      SqlDataSource1.InsertParameters[
    "ContactTitle"].DefaultValue=ContactTitle.SelectedValue;
      SqlDataSource1.Insert();
      }

      <
    /script>
      
      其中的cancel按钮的事件,用来取消显示Gridview的footer模版,因此设置showfooter属性为false,而addbutton1按钮,是当用户决定新增记录时点选的,此时将设置showfooter属性为true,以显示各列的foottemplate,从而达到显示新的一个空白行的目的。
      
      而在更新代码button1_click事件中,将首先使用Gridview1.footerrow.findcontrol的方法,将用户新增的各字段的值提取出来,然后分别赋值给sqldatasource的insertparameters集合(注意要一一对应),最后使用sqldatasource的insert方法,就可以成功向数据库增加一条新记录了。
      
      另外,为了在窗体加载时,显示数据库northwind中customers表的数据,需要设置sqldatsource1的属性,如下代码:
      
      
    <asp:SqlDataSource ID="SqlDataSource1" Runat="server"
      InsertCommand="INSERT INTO [Customers] ([CustomerID], [CompanyName], [ContactTitle]) VALUES (@CustomerID, @CompanyName, @ContactTitle)"
      SelectCommand="SELECT top 5 [CustomerID], [CompanyName], [ContactTitle] FROM [Customers]"
      ConnectionString="server=localhost;uid=sa;password=XXXXX;database=northwind">
      <InsertParameters>
      <asp:Parameter Type="String" Name="CustomerID"></asp:Parameter>
      <asp:Parameter Type="String" Name="CompanyName"></asp:Parameter>
      <asp:Parameter Type="String" Name="ContactTitle"></asp:Parameter>
      </InsertParameters>
      </asp:SqlDataSource>
      
      其中,必须设置insertcommand和selectcommand属性,设置数据提取和插入的语句,并且要设置好insertparameters集合中,各字段的类型和名称即可。
      
      2、一次性更新所有的Gridview记录
      
      我们经常会遇到这样的情况,在Gridview中列出的所有记录中,有时要同时修改多条记录,并且将其保存到数据库中去。那么在Gridview中应该如何实现呢?在Gridview中,有两种实现的方法,下面分别进行介绍:
      
      先来看下第一种方法,本方法是使用sqldatasource来更新所有记录,但这个方法比较慢,因为每更新一条记录都要建立数据连接并执行updatecommand,会影响性能。其主要代码如下:
      
      
    <script runat="server">
      void Button1_Click(object sender, EventArgs e)
      {
      for (int i = 0; i < Gridview1.Rows.Count; i++)
      {
      GridviewRow row = Gridview1.Rows[i];
      SqlDataSource1.UpdateParameters[0].DefaultValue = ((TextBox)row.Cells[0].FindControl("TextBox2")).Text;
      SqlDataSource1.UpdateParameters[1].DefaultValue = ((TextBox)row.Cells[1].FindControl("TextBox3")).Text;
      SqlDataSource1.UpdateParameters[2].DefaultValue = Gridview1.DataKeys[i].Value.ToString();
      SqlDataSource1.Update();
      }
      }
      </script>
      <html xmlns="http://www.w3.org/1999/xhtml" >
      <head id="Head1" runat="server">
      <title>Untitled Page</title>
      </head>
      <body>
      <form id="form1" runat="server">
      <div>
      <asp:Gridview ID="Gridview1" Runat="server" DataSourceID="SqlDataSource1" DataKeyNames="CustomerID" AutoGenerateColumns="False">
      <Columns>
      <asp:TemplateField SortExpression="CustomerID" HeaderText="CustomerID">
      <ItemTemplate>
      <asp:TextBox Runat="server" Text=’<%# Bind("CustomerID") %>’ ID="TextBox1"></asp:TextBox>
      </ItemTemplate>
      
      </asp:TemplateField>
      <asp:TemplateField SortExpression="CompanyName" HeaderText="CompanyName">
      <ItemTemplate>
      <asp:TextBox Runat="server" Text=’<%# Bind("CompanyName") %>’ ID="TextBox2"></asp:TextBox>
      </ItemTemplate>
      </asp:TemplateField>
  • 相关阅读:
    BZOJ3752 : Hack
    XIV Open Cup named after E.V. Pankratiev. GP of SPb
    XIII Open Cup named after E.V. Pankratiev. GP of Ukraine
    BZOJ2087 : [Poi2010]Sheep
    BZOJ2080 : [Poi2010]Railway
    BZOJ2082 : [Poi2010]Divine divisor
    Moscow Pre-Finals Workshop 2016. National Taiwan U Selection
    XIII Open Cup named after E.V. Pankratiev. GP of Asia and South Caucasus
    XIII Open Cup named after E.V. Pankratiev. GP of Azov Sea
    XIII Open Cup named after E.V. Pankratiev. GP of SPb
  • 原文地址:https://www.cnblogs.com/ghx88/p/373791.html
Copyright © 2011-2022 走看看