小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

DataGridView的添加、編輯、更新 - 太上老君的日志 - 網(wǎng)易博客

 秋水風(fēng)帆 2010-11-27

DataGridView的添加、編輯、更新

.net 2007-09-25 09:54:14 閱讀86 評(píng)論2   字號(hào): 訂閱

  今天說(shuō)說(shuō)DataGridView吧,在一個(gè)小項(xiàng)目中用到了這個(gè)。面對(duì)的問(wèn)題是要在DataGridView中編輯、更新其中的值,然后怎么回寫(xiě)到數(shù)據(jù)庫(kù)中?一開(kāi)始的想法也是用循環(huán)讀取Cell,然后自己手動(dòng)回寫(xiě)到數(shù)據(jù)庫(kù)中,但總覺(jué)得不方便,認(rèn)為微軟會(huì)把這些工作封裝好的,就上網(wǎng)查了一下,發(fā)現(xiàn)確實(shí)有這個(gè)功能。先描述一下數(shù)據(jù)庫(kù)中的結(jié)構(gòu)

    表1                                               表2

ID Name SexID                      ID   Sex

1      A      1                           1      男

2      B      2                           2      女

3      C      2

 

一開(kāi)始的綁定是很容易的,但綁定后更新不了數(shù)據(jù)庫(kù)中的值,一更新就提示SexID的值是沒(méi)設(shè)置數(shù)據(jù)源的,因?yàn)镾exID是外鍵。還好在網(wǎng)上查到了一個(gè)折中的解決辦法,是在建立一個(gè)DataTable自己做映射:

    DataTable dtRelation = new DataTable();
    dtRelation.Columns.Add("Code",typeof(byte));
    dtRelation.Columns.Add("DisplayString",typeof(string));
    dtRelation.Rows.Add(new object[] { 0, "蘋(píng)果" });
    dtRelation.Rows.Add(new object[] { 1, "香蕉" });
    dtRelation.Rows.Add(new object[] { 2, "西瓜" });

    2.設(shè)置下拉列表列(DataGridViewComboxColumn)屬性:

    下拉列表列.DataSource = dtRelation;
    下拉列表列.ValueMember = "Code";
    下拉列表列.DisplayMember = "DisplayString";   

    下拉列表列.DataPropertyName = 數(shù)據(jù)源.列名;

 

后來(lái)我發(fā)現(xiàn)其實(shí)不用DataTable也可以直接讓DataGridView完成綁定2個(gè)表的操作,而且更新時(shí)是可以直接更新的:

        SqlDataAdapter da;
        SqlCommand cmd;
        SqlCommandBuilder cmdBuilder;
        DataSet ds;

        private void DataBind()
        {
            da = new SqlDataAdapter(cmd);
            cmdBuilder = new SqlCommandBuilder(da);

            ds = new DataSet();
            da.Fill(ds, "Students");

            dataGridView1.AutoGenerateColumns = false;

            //綁定數(shù)據(jù)源
            dataGridView1.DataSource = ds.Tables["Students"];

            Column1.DataPropertyName = ds.Tables["Students"].Columns[1].ColumnName;
            Column2.DataPropertyName = ds.Tables["Students"].Columns[2].ColumnName;
            Column3.DataPropertyName = ds.Tables["Students"].Columns[3].ColumnName;
            

            //初始化性別
            string sql_Sex = "select * from Sex";
            SqlCommand cmd_Sex = new SqlCommand(sql_Sex, Main.Conn);
            SqlDataAdapter da_Sex = new SqlDataAdapter(cmd_Sex);
            DataSet ds_Sex = new DataSet();
            da_Sex.Fill(ds_Sex, "Sex");
            Column3.DataSource = ds_Sex.Tables["Sex"];
            Column3.DisplayMember = "Value";
            Column3.ValueMember = "ID";
        }

        string sqlSTR = "select * from Students";
        cmd = new SqlCommand(sqlSTR, Main.Conn);
        DataBind();

至此,我們已經(jīng)成功將DataGridView綁定了2個(gè)表,而且不用DataTable做中間層。關(guān)鍵就在:

DataSource                                      //設(shè)定要綁定的數(shù)據(jù)源

DataPropertyName                           //設(shè)置更新后回寫(xiě)到數(shù)據(jù)庫(kù)的哪一列,多表時(shí)要把數(shù)據(jù)源也寫(xiě)上

DisplayMember                                 //設(shè)置要顯示在DataGridView的字段

ValueMember                                   //設(shè)置對(duì)應(yīng)DisplayMember的實(shí)際值的字段

這幾個(gè)屬性上。

 

在更新回?cái)?shù)據(jù)源時(shí)還有一點(diǎn)要注意,就是綁定數(shù)據(jù)源時(shí)一定要有主鍵,這樣你只要設(shè)置SqlDataAdapter中的SelectCommand屬性,其余的UpdateCommand、DeleteCommand、InsertCommand屬性就會(huì)自動(dòng)設(shè)置、并完成相應(yīng)的功能:

            try
            {
               da.Update(ds.Tables[0].GetChanges());
               MessageBox.Show("數(shù)據(jù)處理成功!");
               ds.Tables[0].AcceptChanges();
            }
            catch (Exception Error)
            {
                MessageBox.Show(Error.Message,);
            }

舉一反三、能成功綁定2個(gè)表,也一樣可以綁定多個(gè)表!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多