<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)

    相冊(cè)

    收藏夾(18)

    JAVA

    搜索

    •  

    積分與排名

    • 積分 - 825769
    • 排名 - 49

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    轉(zhuǎn)自:http://blog.csdn.net/lubiaopan/article/details/5915774

    當(dāng)使用
    Combobox控件時(shí),出現(xiàn)SelectedValue的值為“System.Data.DataRowView”的原因有兩個(gè):在Combobox的DataSource不為空的情況下,要么是沒(méi)有為ValueMember賦值,要么是賦值賦錯(cuò)了,這兩種情況下系統(tǒng)就會(huì)把SelectedValue的默認(rèn)值輸出來(lái)(注意紅色部分,如果DataSource為空,那么SelectedValue的值為null)。但有時(shí)即使你對(duì)ValueMember賦了正確的值也會(huì)出現(xiàn)這個(gè)問(wèn)題,這里有一個(gè)賦值時(shí)機(jī)選擇的問(wèn)題,請(qǐng)看下面的示例:

           首先,構(gòu)造如下所示的一個(gè)窗體:

          

    窗體有一個(gè)下拉框,名為Combobox1,還有一個(gè)文本框,名為TextBox1,功能很簡(jiǎn)單,當(dāng)選擇下拉框的某一項(xiàng)的時(shí)候,把該選擇項(xiàng)對(duì)應(yīng)的ValueMember的值顯示到文本框中。下面是實(shí)現(xiàn)該功能的核心代碼:

    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. }  

     

     

    運(yùn)行上面的代碼,窗體初始化完畢后輸出的結(jié)果如下:

     

    文本框顯示的是“System.Data.DataRowView”,前面說(shuō)過(guò),只有在沒(méi)有為Combobox指定ValueMember的值或指定錯(cuò)的情況下才會(huì)是該字符串,可程序已經(jīng)正確指定了ValueMember為什么還是這個(gè)結(jié)果呢?我試著選擇其他的下拉項(xiàng),發(fā)現(xiàn)顯示的結(jié)果變成了預(yù)想的值,原因何在?

           仔細(xì)觀察程序發(fā)現(xiàn)原因在于ValueMember賦值的時(shí)機(jī),上面的代碼當(dāng)執(zhí)行完DataSource賦值語(yǔ)句之后,觸發(fā)了SelectedIndexChanged事件,而此時(shí)還未指定ValueMember,所以窗體初次初始化后顯示的是System.Data.DataRowView”,解決方法很簡(jiǎn)單:只需DataSource賦值語(yǔ)句放到DisplayMember、ValueMember語(yǔ)句之后。

    好,這個(gè)問(wèn)題解決了,新的問(wèn)題又來(lái)了,請(qǐng)看下面的描述:

    突然想到Combobox還有一個(gè)事件是SelectedValueChanged,還是上面的程序Code-1,把SelectedIndexChanged替換為SelectedValueChanged,會(huì)是什么效果呢?試了一下,沒(méi)有報(bào)錯(cuò),并且窗體初始化完畢后顯示的就是預(yù)期的值0。呵呵,又找到了一種解決方法。問(wèn)題還沒(méi)完,請(qǐng)接著往下看:

    上面SelectedValueChanged的試驗(yàn)中,DataSource是在DisplayMemberValueMember前面的,如果放到它們兩個(gè)后面呢?繼續(xù)嘗試,這次報(bào)錯(cuò)了——“未將對(duì)象引用到對(duì)象的示例”,對(duì)程序進(jìn)行跟蹤,當(dāng)執(zhí)行完this.comboBox1.ValueMember = "Value"語(yǔ)句之后,程序轉(zhuǎn)到了comboBox1_SelectedIndexChanged方法,在this.textBox1.Text = this.comboBox1.SelectedValue.ToString();語(yǔ)句處報(bào)錯(cuò),SelectedValue的值為空,因?yàn)榇藭r(shí)還沒(méi)有給DataSource賦值,所以報(bào)這個(gè)錯(cuò)。

    現(xiàn)在可以總結(jié)了,當(dāng)使用SelectedIndexChanged時(shí),ValueMember在DataSource前進(jìn)行賦值,當(dāng)使用SelectedValueChanged時(shí),ValueMember在DataSource后進(jìn)行賦值。

    還有一個(gè)問(wèn)題很有意思,如下所示:

    this.comboBox1.DisplayMember = "Name";

    this.comboBox1.ValueMember = "ValueError";

       this.comboBox1.DataSource = table;

    上面故意把ValueMember的值寫錯(cuò)了,運(yùn)行起來(lái)沒(méi)有任何問(wèn)題(是指沒(méi)有報(bào)錯(cuò),此時(shí)的SelectedValue值都為System.Data.DataRowView),然后我們對(duì)這三行代碼的順序做一下調(diào)整,如下:

       this.comboBox1.DataSource = table;

    this.comboBox1.DisplayMember = "Name";

    this.comboBox1.ValueMember = "ValueError";

    上面ValueMember的值依舊是錯(cuò)的,但是對(duì)其賦值操作放到了DataSource語(yǔ)句之后,運(yùn)行程序,在ValueMember賦值語(yǔ)句處報(bào)錯(cuò)如下:“無(wú)法綁定到值成員”。

    當(dāng)指定了DataSource的值后再對(duì)ValueMember賦錯(cuò),如果此時(shí)賦值賦錯(cuò)的話,運(yùn)行時(shí)就會(huì)報(bào)錯(cuò),如果是在DataSource語(yǔ)句之前對(duì)ValueMember賦值則不會(huì)報(bào)錯(cuò),大家在應(yīng)用的時(shí)候一定要注意。



    posted on 2013-03-13 11:11 Ke 閱讀(373) 評(píng)論(0)  編輯  收藏 所屬分類: C#
    主站蜘蛛池模板: 久久亚洲国产中v天仙www| 免费一级毛片在线播放| 精品久久久久国产免费| 国产色婷婷精品免费视频| 亚洲免费日韩无码系列| 亚洲av伊人久久综合密臀性色| 亚洲欧洲精品在线| 亚洲一本一道一区二区三区| 理论片在线观看免费| 国产精品偷伦视频观看免费| 69式互添免费视频| 毛片免费在线播放| 浮力影院亚洲国产第一页| 久久久亚洲欧洲日产国码二区 | 国产午夜鲁丝片AV无码免费| 亚洲一区二区精品视频| 亚洲国产精品自在在线观看| 91丁香亚洲综合社区| 成年免费a级毛片| 99视频免费播放| 国产精品四虎在线观看免费| 黑人精品videos亚洲人| 国产精品亚洲精品观看不卡| 一区二区三区免费高清视频| 亚洲精品免费在线视频| 免费乱理伦在线播放| 亚洲色图国产精品| 国产精品亚洲五月天高清| 免费精品无码AV片在线观看| 国产免费av一区二区三区| 亚洲日本在线看片| 国产亚洲综合久久| 59pao成国产成视频永久免费| 免费h成人黄漫画嘿咻破解版| 亚洲国产一区二区三区青草影视| 亚洲成av人无码亚洲成av人| 免费A级毛片无码A∨| 无码欧精品亚洲日韩一区夜夜嗨 | 国产精品成人免费一区二区| 亚洲综合伊人久久大杳蕉| 2019亚洲午夜无码天堂|