在DataGrids和DropDownLists中使用ADO

來源:互聯網
上載者:User
ado|datagrid
這是一篇關於使用可重用代碼綁定ADO資料到控制項的文章。


介紹
ADO是一種功能非常強大的從資料庫中讀取資料的技術,但是它也使人很容易搞糊塗,串連資料到DataGrid或其他控制項需要一些技巧和串連方法。我使用的方法是開發標準化的可重用代碼訪問資料庫和顯示資料。我已經寫了很多通過SQL語句在DataGrid中顯示結果的ASP.NET頁面。

這篇文章將要描述我是怎樣使用可重用代碼串連ADO資料,並在DataGrid和其他控制項中顯示結果的。我也會講述怎麼為類似的任務開發你自己的代碼。
背景
這篇文章假定你已經具有C#,SQL,ADO和.NET控制項的知識。

我在示範代碼中使用的是NorthWind資料庫,但是你可以使用任意的資料庫。
使用代碼Web.Config
我使用在 web.config 中的 <appSettings> 來儲存程式中所要用到的字串。如果你沒這樣做過,那麼你應該試一試。我一般使用 web.config 儲存資料庫連接資訊,因為這樣可以使它更具有可移植性。

 <appSettings>



  <add key="dsn_SQL"



    value="SERVER=localhost;uid=myuser;password=pass;DATABASE=NorthWind;"/>



</appSettings>


DataGrid.aspx.cs
下面使 DataGrid.aspx 頁面的完整代碼。在這個程式中 BindGrid() 函數的作用使串連到資料庫並在 DataGrid 中顯示結果資料。

using System;



using System.Collections;



using System.ComponentModel;



using System.Data;



using System.Drawing;



using System.Web;



using System.Web.SessionState;



using System.Web.UI;



using System.Web.UI.WebControls;



using System.Web.UI.HtmlControls;



using System.Data.SqlClient;



using System.Configuration;




 


namespace Easy_ADO_Binds



{



  public class WebForm1 : System.Web.UI.Page



  {



    protected System.Web.UI.WebControls.DataGrid DataGrid1;



    // 從 web.config 獲得連接字串



    public String strConnectSQL =



      (ConfigurationSettings.AppSettings["dsn_SQL"]);




 


    private void Page_Load(object sender, System.EventArgs e)



    {



      // 構造SQL字串



      string SQLstring = "Select * FROM Employee";




 


      // 調用並構造BindGrid



      BindGrid(strConnectSQL, SQLstring, DataGrid1 );



    }




 


    private void BindGrid(string DBconnectString, string sqlCommand,



                           System.Web.UI.WebControls.DataGrid DGrid)



// 從資料庫中載入初始化頁面



// 綁定到datagrid



    {



      // 建立資料連線



      SqlConnection conn = new SqlConnection(DBconnectString);




 


      // 調用SQL語句



      SqlCommand command = new SqlCommand(sqlCommand, conn);




 


      // 建立data adapter



      SqlDataAdapter adapter = new SqlDataAdapter(command);




 


      // 建立並填充dataset



      DataSet ds = new DataSet();



      adapter.Fill(ds);




 


      // 填充並綁定到datagrid



      DGrid.DataSource = ds;



      DGrid.DataBind();



      // 關閉串連



      conn.Close();



    }




 


#region Web Form Designer generated code



    override protected void OnInit(EventArgs e)



    {



      //



      // CODEGEN: This call is required by the ASP.NET Web Form Designer.



      //



      InitializeComponent();



      base.OnInit(e);



    }




 


    private void InitializeComponent()



    {



      this.Load += new System.EventHandler(this.Page_Load);



    }



#endregion



  }



}


從 Web.Config 獲得SQL字串


允許你從 web.config 拿出你所需要的字串,這是不是很靈活?我用這種方法指定資料庫的串連,報表服務器,首頁預設URL字串以及其他一些全域性的字串。



using System.Configuration;



// 從 web.config 獲得連接字串



public String strConnectSQL = (ConfigurationSettings.AppSettings["dsn_SQL"]);


private void BindGrid()
這時工程最後做的事情。我把這些代碼放到任意的頁面中,我希望能從自己的資料庫中取到資料並用 DataGrid 顯示出來。我不必寫複雜的C#或ADO代碼。隨便訪問它,通過資料庫、SQL、 DataGrid 參數,就為我獲得了資料。
BindGrid() 如何工作
你傳遞給 BindGrid() 一個資料庫連接,一個SQL字串和一個DataGrid 標識符,然後它就串連到資料庫,運行SQL命令,在DataGrid 中顯示資料,最後退出函數。
BindGrid( db, SQL, DataGrid)

BindGrid( "告訴我是什麼資料庫", "告訴我你想運行什麼SQL語句", "告訴我你想在哪個DataGrid中顯示資料")

BindGrid 輸入
private void BindGrid(string DBconnectString,



   string sqlCommand, System.Web.UI.WebControls.DataGrid DGrid)


string DBconnectString: Database

string sqlCommand: SQL

System.Web.UI.WebControls.DataGrid DGrid: DataGrid


注意:你在C#中可以為這個函數指定一個Web控制項作為輸入。所有你必須做的事情是指定哪一個DataGrid 是你想要使用這個函數的。

private void BindGrid(string DBconnectString,



      string sqlCommand, System.Web.UI.WebControls.DataGrid DGrid)



// 從資料庫中載入初始化頁面



  // 綁定到datagrid



{



  // 建立資料連線



  SqlConnection conn = new SqlConnection(DBconnectString);




 


  // 調用SQL語句



  SqlCommand command = new SqlCommand(sqlCommand, conn);




 


  // 建立data adapter



  SqlDataAdapter adapter = new SqlDataAdapter(command);




 


  // 建立並填充dataset



  DataSet ds = new DataSet();



  adapter.Fill(ds);




 


  // 填充並綁定到datagrid



  DGrid.DataSource = ds;



  DGrid.DataBind();



  // 關閉串連



  conn.Close();



}


調用 BindGrid()


函數 BindGrid() 的詳細說明:


資料庫連接字串:在 Web.Config 中指定

SQL 字串:任意SQL字串,甚至可以是預存程序

DataGrid: DataGrid 的標識符


private void Page_Load(object sender, System.EventArgs e)



{



  // 構造SQL字串



  string SQLstring = "Select * FROM Employee";




 


  // 調用並構造BindGrid



  BindGrid(strConnectSQL, SQLstring, DataGrid1 );



}


使用多個 DataGrids


通過不同的SQL命令,在頁面上放置三個 DataGrid 。如下面所示,只要調用具有不同SQL命令的 BindGrid() 三次就可以了。所以現在你可以使用相同的代碼使用多個 DataGrid 。

// DataGrid 1



string SQLstring1 = "Select * FROM Employee";



BindGrid(strConnectSQL, SQLstring1, DataGrid1 );




 


// DateGrid 2



string SQLstring2 = "Select * FROM Customers";



BindGrid(strConnectSQL, SQLstring2, DataGrid2 );




 


//DataGrid3



string SQLstring3 = "Select * FROM Orsders";



BindGrid(strConnectSQL, SQLstring3, DataGrid3 );


使用 BindList()
好了。現在我們將從使用 BindGrid() 轉向使用 BindList() ,它可以使用ASP.NET中的下拉式清單。

代碼稍微有點難理解了,因為 DropDownList  多了兩個屬性:
DataTextField: 下拉式清單中所顯示的,也就是使用者所看到的。

DataValueField: 測定使用者的選擇的值。


這些值都被添加到 BindList() 的輸入參數中,所以可以像這樣運行它:

BindList(db, SQL, Text, Value, DropDownList);



using System;



using System.Collections;



using System.ComponentModel;



using System.Data;



using System.Drawing;



using System.Web;



using System.Web.SessionState;



using System.Web.UI;



using System.Web.UI.WebControls;



using System.Web.UI.HtmlControls;



using System.Data.SqlClient;



using System.Configuration;




 


namespace BindList



{



  public class WebForm1 : System.Web.UI.Page



  {



    protected System.Web.UI.WebControls.DropDownList DropDownList1;



    // 從 web.config 獲得連接字串



    public String strConnectSQL =



        (ConfigurationSettings.AppSettings["dsn_SQL"]);




 


    private void Page_Load(object sender, System.EventArgs e)



    {



      // 建立SQL字串



      string SQLstring = "Select EmployeeID, FirstName + ' ' + LastName" +



                         " as name FROM Employees";



      string TextField = "name";



      string ValueField = "EmployeeID";




 


      BindList(strConnectSQL, SQLstring, TextField ,



                              ValueField, DropDownList1 );



    }




 


    private void BindList(string strConnectSQL, string SQLstring,



            string TextField, string ValueField,



            System.Web.UI.WebControls.DropDownList Dlist)



    {



      SqlConnection myConnection = new SqlConnection(strConnectSQL);



      SqlCommand myCommand = new SqlCommand( SQLstring, myConnection );



      myConnection.Open();




 


      Dlist.DataSource = myCommand.ExecuteReader();



      Dlist.DataTextField = TextField;



      Dlist.DataValueField = ValueField;



      Dlist.DataBind();




 


      myConnection.Close();



    }




 


#region Web Form Designer generated code



    override protected void OnInit(EventArgs e)



    {



      //



      // CODEGEN: This call is required by the ASP.NET Web Form Designer.



      //



      InitializeComponent();



     base.OnInit(e);



    }




 


/// <summary>



/// Required method for Designer support - do not modify



/// the contents of this method with the code editor.



/// </summary>



    private void InitializeComponent()



    {



      this.Load += new System.EventHandler(this.Page_Load);



    }



#endregion

  }



}


有趣的地方
這樣做的好處之一就是你可以在ASP.NET中指定 web 控制項作為函數的輸入參數。這確實改變了我的編碼習慣,我現在正在開發更多的一般性的可重用代碼。
為什麼使用這些代碼
這非常簡單。一旦你要為一個特定的控制項編碼,你就不必再重新寫一次了。你可以一次又一次地使用相同的代碼。
曆史
2004年11月 V1.1


相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。