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

分享

DataGridView中comboBox數(shù)據(jù)綁定的問題

 Cloud書屋 2012-12-19

很多時(shí)候我們都需要使用DataGridView來做數(shù)據(jù)的顯示,DataGridView是一個(gè)很方便的工具,他可以讓用戶直接在控件里面做數(shù)據(jù)的修改,還可以實(shí)現(xiàn)單表的更新,操作起來很方便。但是如果用戶在做一些操作的時(shí)候可以隨意輸入自己想輸入的值,那就有可能和數(shù)據(jù)中建立的約束不匹配,造成數(shù)據(jù)操作異常。所以我們經(jīng)常會考慮盡量不讓用戶一定數(shù)量做輸入操作,也就是說寧愿讓其選擇也不讓其輸入,這樣又可以減少很多的判斷也可以增加操作的成功性,提高用戶體驗(yàn)的舒適度。這就必然需要去考慮到如果在DataGridView里面顯示類似下拉列表的效果。我們知道,在DataGridView控件的列類型里面有一個(gè)DataGridViewComboBoxColumn,它的效果就類似于我們常用的comboBox了。只不守它是在控件之中的,所以在綁定的時(shí)候需要做一些設(shè)置。下面就以兩個(gè)實(shí)例來說明如果綁定數(shù)據(jù)。

首先我們來做一個(gè)簡單的綁定性別的實(shí)例,效果是這樣:

這里,管理員可以修改用戶的性別,但是如果讓其輸入不僅麻煩而且還容易出錯(cuò),造成數(shù)據(jù)更新錯(cuò)誤。它的實(shí)現(xiàn)方法也很簡單。將DataGridView中需要顯示為下拉列表的列修改類型為DataGridViewComboBoxColumn,然后為其Items設(shè)置相應(yīng)的項(xiàng),如男 女,這樣在常規(guī)的數(shù)據(jù)綁定后就會顯示出上圖的效果了!

但是,我們知道,在數(shù)據(jù)庫里面性別一般會有三種類型,int,bit,char(2),如果這里的性別類型在數(shù)據(jù)庫里面是前面兩種,那么很有可能出現(xiàn)綁定異常:

這是因?yàn)檫@種類型的綁定只能綁定字符串,如果是數(shù)值,那就不行了!當(dāng)然,在控件里面設(shè)置的ITEMS項(xiàng)的值也應(yīng)該和數(shù)據(jù)庫里面的值 完全對應(yīng)才可以。

上面的方法可以實(shí)現(xiàn)一般性的綁定需要,但是只適合項(xiàng)值固定的情況,如性別只可能是男和女,不可能是其它的值。但是如果顯示的值是動(dòng)態(tài)的那剛剛這個(gè)方法顯然是不行的,因?yàn)槟悴豢赡芤驗(yàn)槊恳淮蔚奶砑踊蛘邉h除而修改源文件再重新生成一個(gè)項(xiàng)目吧。所以最好的方式是將這個(gè)DataGridViewComboBoxColumn做 到類似單獨(dú)的comboBox的數(shù)據(jù)綁定效果:

string sql = "select subjectid,subjectname from subject";

            da = new SqlDataAdapter(sql, DBHelper.connection);

            da.Fill(ds, "subject");

            this.cboSubject.DataSource = ds.Tables["subject"];

            this.cboSubject.DisplayMember = "subjectname";

            this.cboSubject.ValueMember = "subjectid";

            this.cboSubject.SelectedIndex = 0;

不管數(shù)據(jù)庫如何變化,都是顯示數(shù)據(jù)庫的最新更新的值,如下圖 :

 

為了做到這個(gè)我們需要做以下修改:

常規(guī)的DataGridView數(shù)據(jù)綁定還是一樣,如:

1.       DataSet ds = new DataSet();

SqlDataAdapter da;

2.       sql = string.Format("select studentname,subjectid,studentresult,examdate from student inner join result on student.studentno=result.studentno where student.studentno='{0}'",studentNo);

3.       da.SelectCommand.CommandText = sql;

4.       da.Fill(ds,"student");

5.       this.dgvStudentScore.DataSource=ds.Tables["student"];

為了使DataGridView中的列做到類似comboBox的綁定方式,我們先修改DataGridView列的發(fā)生由DataGridViewTextBoxColumn到DataGridViewComboBoxColumn,之后我們添加了以下代碼:

1.       ((DataGridViewComboBoxColumn)this.dgvStudentScore.Columns["subjectid"]).DataSource=ds.Tables["subject"];

2.       ((DataGridViewComboBoxColumn)this.dgvStudentScore.Columns["subjectid"]).DisplayMember = "subjectname";

3.       ((DataGridViewComboBoxColumn)this.dgvStudentScore.Columns["subjectid"]).ValueMember = "subjectid";

這里,dgvStudentScore是DataGridView控件名,subjectid是控件里面需要?jiǎng)討B(tài)綁定數(shù)據(jù)的列,DataGridViewComboBoxColumn是指這個(gè)列的類型需要強(qiáng)制做一個(gè)轉(zhuǎn)換,不能它還不是一個(gè)真正的ComboBox,也就不能做下拉數(shù)據(jù)的綁定了。

從上面這個(gè)方式可以看到,他的綁定和下拉列表很像,只是需要去獲取到需要做動(dòng)態(tài)綁定的列同時(shí)做一個(gè)類型轉(zhuǎn)換就可以了。

上面還有一個(gè)細(xì)節(jié)就是:在SQL里面只需要讀取到相應(yīng)的ID值(subjectid),同時(shí)在控件里面設(shè)置列的數(shù)據(jù)綁定的時(shí)候也需要將DataPropertyName值設(shè)置為subjectid。

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多