這幾天在做一個小東西,有一個關於資料繫結的問題,自已一直很鬱悶,害我耗費了很多的時間,到最後還是沒有搞明白事怎麼回事,
我對ListBox和ComboBox進行資料繫結 ,在擷取資料的時候一直出問題,以前學習的時候沒有遇見過,
的Binder 方法是
string SQL = "select * from UserInfo";
ds=DB.GetDataSet (SQL);
lboxUser.DataSource = ds.Tables [0];
lboxUser.DisplayMember = "UserID";
在我擷取資料時候,總是的得到值總是 System.Data.DataRowView 害的我鬱悶的要死 最後我在博問問了一下,有人告訴應該這樣
string SQL = "select * from UserInfo";
ds=DB.GetDataSet (SQL);
lboxUser.DataSource = ds.Tables [0];
lboxUser.DisplayMember = "UserID";
lboxUser.ValueMember = "UserID";
但是這樣的方法在lboxUser.SelectValue可以得到正確的值 在用lbloxUser.Items[0].ToString()時候還是得到的是System.Data.DataRowView
我很是鬱悶,最後我採用了一,
我發現控制項的ItemsIndex順序和資料來源中的順序是一樣,所以我就用了一下兩種種很賴皮的方法
方法一:
DataTable dt= (DataTable)(cmbType2.DataSource);
string Iems=dt.Rows[ItemIndex]["UserID"].ToString();//ItemIndex 是你要擷取ListBox中的ItemIndex,這樣就可以擷取要獲得資料了
這樣就行
方法二:
這個方法比較簡單。我看一下我的值是一個System.Data.DataRowView 看一下這個字串發現這是一種資料類型
我就試試看看可不可以將他轉換成對應的資料類型吧看看吧 結果已看可以得到資料,
DataRowView dr=lboxUser .Items [ItemIndex] as DataRowView ;//ItemIndex 是你要擷取ListBox中的ItemIndex
string Iems=dt["UserID"].ToString();//這樣就可以擷取到要得到的資料
這樣的方法有一個好處就是,在擷取資料的時候可以將所有的需要列的資料擷取下了,在ListBox操作的時候不用在和資料庫操作了
省去了和資料庫的串連