ASP.Net中用DataGrid運算元據庫

hljhrbsjf發表於2006-11-15

宣告:本文中的內容來自網路,但經過我自己的整理、驗證,有些內容無法宣告來源,請原作者諒解。

在asp.net中運算元據庫常用DataGrid,本文將常用的方法進行了彙編,適合初學者。

、使用DataGrid控制元件顯示資料庫中的內容:

新增引用

using System.Data.SqlClient;

// 在此處放置使用者程式碼以初始化頁面

//DataGrid控制元件改名為MyDataGrid

// Page_Load中新增如下程式碼:

String selectCmd = "select * from OA_Userlogo";

SqlConnection myConnection = new SqlConnection("server=chaoming;uid=sa;database=Mytest");

SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);

DataSet ds = new DataSet();

myCommand.Fill(ds, "OA_Userlogo");

MyDataGrid.DataSource= ds.Tables["OA_Userlogo"].DefaultView;

MyDataGrid.DataBind();

、在DataGrid中使用引數查詢:

//加入Text控制元件和按鈕控制元件,在按鈕中輸入以下內容

String selectCmd = "select * from OA_Userlogo where 密碼 = @密碼";

SqlConnection myConnection = new SqlConnection("server=chaoming;uid=sa;database=Mytest");

SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);

myCommand.SelectCommand.Parameters.Add(new SqlParameter("@密碼", SqlDbType.VarChar, 50));

//SqlDbType.Varchar 為表OA_Userlogo中的第三個欄位, Varchar必須與資料庫中的欄位//型別一致,50為第三個欄位的長度

myCommand.SelectCommand.Parameters["@密碼"].Value = TextBox1.Text;

DataSet ds = new DataSet();

myCommand.Fill(ds, "OA_Userlogo");

MyDataGrid.DataSource= ds.Tables["OA_Userlogo"].DefaultView;

MyDataGrid.DataBind();

、將資料連線資訊放在Global.asax檔案中

Global.asax檔案中加入引用

using System.Data.SqlClient;

Session_Start 事件中加入以下程式碼:

protected void Session_Start(Object sender, EventArgs e)

{ string f="server=chaoming;uid=sa;database=Mytest";

SqlConnection NowConn1 = new SqlConnection(f);//連至Mytest資料庫

Session["NowSQLNor"]=NowConn1;

}

aspx檔案中進行如下修改:

String selectCmd = "select * from OA_Userlogo where 密碼 = @密碼";

//這裡是引用的關鍵:

SqlConnection myConnection = (SqlConnection)Session["NowSQLNor"];

SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);

myCommand.SelectCommand.Parameters.Add(new SqlParameter("@密碼", SqlDbType.VarChar, 50));

myCommand.SelectCommand.Parameters["@密碼"].Value = TextBox1.Text;

DataSet ds = new DataSet();

myCommand.Fill(ds, "OA_Userlogo");

MyDataGrid.DataSource= ds.Tables["OA_Userlogo"].DefaultView;

MyDataGrid.DataBind();

本例將資料庫連線作為共享的Session物件,相當實用,Web應用系統其他需獲得資料庫的位置,就不必開啟資料庫,只要直接獲得已製作完成的Session即可.

、插入資料

  SqlConnection myConnection;//定義一個空連線,不能少

protected void Page_Load(Object Src, EventArgs E)

{   //在頁的初始化中加入連線內容

    myConnection = new SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes");//連線字串

        if (!IsPostBack) //第一次載入本頁時執行BindGrid()函式

            BindGrid(); //DataGrid控制元件中顯示資料庫中的資料

    }

/*IsPostBack Page頁屬性, 表示獲取一個值,該值指示該頁是否正為響應客戶端回發而載入,或者它是否正被首次載入和訪問。

屬性值:如果是為響應客戶端回發而載入該頁,則為 true;否則為 false

*/

public void BindGrid()

    {

        SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection);

        DataSet ds = new DataSet();

        myCommand.Fill(ds, "Authors");//將資料填充到記憶體中的表Authors,也可用其他名

        MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView;

        MyDataGrid.DataBind();

    }

public void AddAuthor_Click(Object sender, EventArgs E)

    {

        Message.InnerHtml = "";//錯誤提示

        if (Page.IsValid)   //獲取一個值,該值指示頁驗證是否成功,詳細說明見後

        {    //將資料庫中的欄位與變數連線起來,

            String insertCmd = "insert into Authors (au_id, au_lname, au_fname, phone, address, city, state, zip, contract) values (@Id, @LName, @FName, @Phone, @Address, @City, @State, @Zip, @Contract)";

SqlCommand myCommand = new SqlCommand(insertCmd, myConnection);

myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 11));

// SqlDbType.NvarChar表示資料庫中au_id欄位的型別,11表示長度,以下類似

myCommand.Parameters["@Id"].Value = au_id.Value;

// au_id.Valuetext控制元件或其他控制元件的值,也可直接賦值如”abcd”

            myCommand.Parameters.Add(new SqlParameter("@LName", SqlDbType.NVarChar, 40));

            myCommand.Parameters["@LName"].Value = au_lname.Value;

            myCommand.Parameters.Add(new SqlParameter("@FName", SqlDbType.NVarChar, 20));

            myCommand.Parameters["@FName"].Value = au_fname.Value;

            myCommand.Parameters.Add(new SqlParameter("@Phone", SqlDbType.NChar, 12));

            myCommand.Parameters["@Phone"].Value = phone.Value;

            myCommand.Parameters.Add(new SqlParameter("@Address", SqlDbType.NVarChar, 40));

            myCommand.Parameters["@Address"].Value = address.Value;

            myCommand.Parameters.Add(new SqlParameter("@City", SqlDbType.NVarChar, 20));

            myCommand.Parameters["@City"].Value = city.Value;

            myCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NChar, 2));

            myCommand.Parameters["@State"].Value = state.Value;

            myCommand.Parameters.Add(new SqlParameter("@Zip", SqlDbType.NChar, 5));

            myCommand.Parameters["@Zip"].Value = zip.Value;

            myCommand.Parameters.Add(new SqlParameter("@Contract", SqlDbType.NVarChar,1));

            myCommand.Parameters["@Contract"].Value = contract.Value;

            myCommand.Connection.Open();

            try

            {

                myCommand.ExecuteNonQuery();//寫入資料庫

                Message.InnerHtml = "已新增記錄
" + insertCmd + "

";

            }

            catch (SqlException e)

            {

                if (e.Number == 2627)

                    Message.InnerHtml = "錯誤:已存在具有相同主鍵的記錄

";

                else

                    Message.InnerHtml = "錯誤:未能新增記錄,請確保正確填寫了欄位

";

              Message.Style["color"] = "red";

            }

            myCommand.Connection.Close();

        }

        BindGrid();//重新整理DataGrid顯示

    }

/* Page.IsValid 屬性

屬性值:如果頁驗證成功,則為 true;否則為 false

備註:若要使該屬性返回 truePage.Validators 屬性中的所有驗證伺服器控制元件必須都驗證成功。只有在已呼叫 Page.Validate 方法,或已在開始窗體處理的 ASP.NET 伺服器控制元件的 OnServerClick 處理程式中將 CausesValidation 屬性設定為 true 後才可以選中該屬性,。這些伺服器控制元件包括 ButtonHtmlButtonHtmlInputButtonHtmlInputImageImageButton 以及 LinkButton 類。

示例:下面的示例說明使用 IsValid 屬性設定條件語句。如果該屬性返回 true,則 lblOutput 控制元件的 Text 屬性被設定為“Page is valid!”。否則,它被設定為“Some of the required fields are empty”

void ValidateBtn_Click(Object Sender, EventArgs E) {

   if (Page.IsValid == true) {

      lblOutput.Text = "Page is Valid!";

   }

   else {

      lblOutput.Text = "Some of the required fields are empty";

   } 

}

、修改資料

修改資料與新增資料不同,為了確定哪一行應該是可編輯的,需要一種方法接受使用者關於他們希望編輯哪一行的輸入。DataGrid 可以包含一個 EditCommandColumn 來呈現激發三個特殊事件的連結:EditCommandUpdateCommand CancelCommandEditCommandColumn 以宣告方式新增到 DataGrid Columns 集合,並將DataGridDataKeyFied屬性與資料庫中索引欄位相連線。如本例中:DataKeyField=au_id

SqlConnection myConnection;

protected void Page_Load(Object Src, EventArgs E)

{

myConnection = new SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes");

if (!IsPostBack)

BindGrid();

}

public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs e)

{

MyDataGrid.EditItemIndex = (int)e.Item.ItemIndex;

BindGrid();

}

public void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e)

{

MyDataGrid.EditItemIndex = -1;

BindGrid();

}

public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)

{

String updateCmd = "UPDATE Authors SET au_id = @Id, au_lname = @LName, au_fname = @FName, phone = @Phone, "

+ "address = @Address, city = @City, state = @State, zip = @Zip, contract = @Contract where au_id = @Id";//where為查詢條件

SqlCommand myCommand = new SqlCommand(updateCmd, myConnection);

myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 11));

myCommand.Parameters.Add(new SqlParameter("@LName", SqlDbType.NVarChar, 40));

myCommand.Parameters.Add(new SqlParameter("@FName", SqlDbType.NVarChar, 20));

myCommand.Parameters.Add(new SqlParameter("@Phone", SqlDbType.NChar, 12));

myCommand.Parameters.Add(new SqlParameter("@Address", SqlDbType.NVarChar, 40));

myCommand.Parameters.Add(new SqlParameter("@City", SqlDbType.NVarChar, 20));

myCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NChar, 2));

myCommand.Parameters.Add(new SqlParameter("@Zip", SqlDbType.NChar, 5));

myCommand.Parameters.Add(new SqlParameter("@Contract", SqlDbType.NVarChar,1));

myCommand.Parameters["@Id"].Value = MyDataGrid.DataKeys[(int)e.Item.ItemIndex];

String[] cols = {"@Id","@LName","@FName","@Phone","@Address","@City","@State","@Zip","@Contract"};

int numCols = e.Item.Cells.Count;

for (int i=2; i//跳過第一、第二和最後一列

{

String colvalue =((TextBox)e.Item.Cells[i].Controls[0]).Text;

// 檢查在所需欄位中是否有空值

if (i<6 && colvalue == "")

{

Message.InnerHtml = "錯誤:作者 ID”姓名電話不允許使用空值";

Message.Style["color"] = "red";

return;

}

myCommand.Parameters[cols[i-1]].Value = colvalue;

}

//追加最後一行,將 true/false 值轉換為 0/1

if (String.Compare(((TextBox)e.Item.Cells[numCols-1].Controls[0]).Text, "True", true)==0)

myComm

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/631872/viewspace-877631/,如需轉載,請註明出處,否則將追究法律責任。

相關文章