<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 6  文章 - 129  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(14)

    隨筆檔案(6)

    文章分類(467)

    文章檔案(423)

    相冊

    收藏夾(18)

    JAVA

    搜索

    •  

    積分與排名

    • 積分 - 825594
    • 排名 - 49

    最新評論

    閱讀排行榜

    評論排行榜

    轉自:http://blog.csdn.net/lubiaopan/article/details/5915774

    當使用
    Combobox控件時,出現SelectedValue的值為“System.Data.DataRowView”的原因有兩個:在Combobox的DataSource不為空的情況下,要么是沒有為ValueMember賦值,要么是賦值賦錯了,這兩種情況下系統就會把SelectedValue的默認值輸出來(注意紅色部分,如果DataSource為空,那么SelectedValue的值為null)。但有時即使你對ValueMember賦了正確的值也會出現這個問題,這里有一個賦值時機選擇的問題,請看下面的示例:

           首先,構造如下所示的一個窗體:

          

    窗體有一個下拉框,名為Combobox1,還有一個文本框,名為TextBox1,功能很簡單,當選擇下拉框的某一項的時候,把該選擇項對應的ValueMember的值顯示到文本框中。下面是實現該功能的核心代碼:

    Code-1:

    1. namespace FrmForTest  
    2. {  
    3.     public partial class Form1 : Form  
    4.     {  
    5.         public Form1()  
    6.         {  
    7.             InitializeComponent();  
    8.             this.InitialCombobox();  
    9.         }  
    10.   
    11.         private void InitialCombobox()  
    12.         {  
    13.             DataTable table = new DataTable();  
    14.             DataColumn column;  
    15.             DataRow row;  
    16.   
    17.             column = new DataColumn("Name");  
    18.             table.Columns.Add(column);  
    19.   
    20.             column = new DataColumn("Value");  
    21.             table.Columns.Add(column);  
    22.   
    23.             for (int i = 0; i < 5; i++)  
    24.             {  
    25.                 row = table.NewRow();  
    26.                 row["Name"] = "Test" + i;  
    27.                 row["Value"] = i.ToString();  
    28.                 table.Rows.Add(row);  
    29.             }  
    30.   
    31.             this.comboBox1.DataSource = table;  
    32.             this.comboBox1.DisplayMember = "Name";  
    33.             this.comboBox1.ValueMember = "Value";  
    34.         }  
    35.   
    36.         private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)  
    37.         {  
    38.             this.textBox1.Text = this.comboBox1.SelectedValue.ToString();  
    39.         }  
    40.     }  
    41. }  

     

     

    運行上面的代碼,窗體初始化完畢后輸出的結果如下:

     

    文本框顯示的是“System.Data.DataRowView”,前面說過,只有在沒有為Combobox指定ValueMember的值或指定錯的情況下才會是該字符串,可程序已經正確指定了ValueMember為什么還是這個結果呢?我試著選擇其他的下拉項,發現顯示的結果變成了預想的值,原因何在?

           仔細觀察程序發現原因在于ValueMember賦值的時機,上面的代碼當執行完DataSource賦值語句之后,觸發了SelectedIndexChanged事件,而此時還未指定ValueMember,所以窗體初次初始化后顯示的是System.Data.DataRowView”,解決方法很簡單:只需DataSource賦值語句放到DisplayMemberValueMember語句之后。

    好,這個問題解決了,新的問題又來了,請看下面的描述:

    突然想到Combobox還有一個事件是SelectedValueChanged,還是上面的程序Code-1,把SelectedIndexChanged替換為SelectedValueChanged,會是什么效果呢?試了一下,沒有報錯,并且窗體初始化完畢后顯示的就是預期的值0。呵呵,又找到了一種解決方法。問題還沒完,請接著往下看:

    上面SelectedValueChanged的試驗中,DataSource是在DisplayMemberValueMember前面的,如果放到它們兩個后面呢?繼續嘗試,這次報錯了——“未將對象引用到對象的示例”,對程序進行跟蹤,當執行完this.comboBox1.ValueMember = "Value"語句之后,程序轉到了comboBox1_SelectedIndexChanged方法,在this.textBox1.Text = this.comboBox1.SelectedValue.ToString();語句處報錯,SelectedValue的值為空,因為此時還沒有給DataSource賦值,所以報這個錯。

    現在可以總結了,當使用SelectedIndexChanged時,ValueMember在DataSource前進行賦值,當使用SelectedValueChanged時,ValueMember在DataSource后進行賦值。

    還有一個問題很有意思,如下所示:

    this.comboBox1.DisplayMember = "Name";

    this.comboBox1.ValueMember = "ValueError";

       this.comboBox1.DataSource = table;

    上面故意把ValueMember的值寫錯了,運行起來沒有任何問題(是指沒有報錯,此時的SelectedValue值都為System.Data.DataRowView),然后我們對這三行代碼的順序做一下調整,如下:

       this.comboBox1.DataSource = table;

    this.comboBox1.DisplayMember = "Name";

    this.comboBox1.ValueMember = "ValueError";

    上面ValueMember的值依舊是錯的,但是對其賦值操作放到了DataSource語句之后,運行程序,在ValueMember賦值語句處報錯如下:“無法綁定到值成員”。

    當指定了DataSource的值后再對ValueMember賦錯,如果此時賦值賦錯的話,運行時就會報錯,如果是在DataSource語句之前對ValueMember賦值則不會報錯,大家在應用的時候一定要注意。



    posted on 2013-03-13 11:11 Ke 閱讀(373) 評論(0)  編輯  收藏 所屬分類: C#
    主站蜘蛛池模板: 亚洲人和日本人jizz| 国产美女a做受大片免费| 亚洲精品成人无码中文毛片不卡| 国产亚洲精品欧洲在线观看| 午夜毛片不卡高清免费| 99亚偷拍自图区亚洲| 午夜成人免费视频| 亚洲国产精品无码久久九九大片| 毛片免费视频播放| 亚洲精品美女久久久久久久| 日韩免费福利视频| 免费精品视频在线| 亚洲中久无码永久在线观看同| 国产猛男猛女超爽免费视频| 亚洲资源在线观看| 性做久久久久久久免费看| 亚洲美国产亚洲AV| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲综合激情六月婷婷在线观看 | 国产精品无码一区二区三区免费 | 久久亚洲精品无码网站| 亚洲AV永久无码精品一区二区国产| 免费国产va在线观看| 亚洲精品无码鲁网中文电影| 91免费国产精品| 亚洲欧美日韩国产精品一区| 亚洲精品综合久久| 一个人免费日韩不卡视频| 在线观看日本亚洲一区| 亚洲国产成人久久精品99 | 免费A级毛片无码视频| 国产成人精品日本亚洲专区6| 四虎成人免费影院网址| aa级毛片毛片免费观看久| 亚洲色图古典武侠| 免费一级毛片正在播放| 久久免费看少妇高潮V片特黄| 亚洲一卡2卡3卡4卡5卡6卡| 亚洲色欲色欲www在线丝| 国色精品卡一卡2卡3卡4卡免费| 全部一级一级毛片免费看|