簡體   English   中英

依賴組合框填充問題

[英]problem with dependent comboboxes fill

我有一個Windows窗體,用戶可以從組合框(如country-state-city方法)中選擇布料參數。 和我的參數是:

typeName - typeNo - pattern - variant
R - 125 - 254978 - 1
R - 125 - 254979 - 1
R - 125 - 254979 - 2
Ri- 54 - 54658 - 1
Ri- 54 - 54658 - 2... etc.

我在typeNoCombobox填充typeNameCombobox_SelectedIndexChanged()事件之后填充formLoad上的typeNameCombobox,並像此patternCombobox填充typeNoCombobox_SelectedIndexChanged()事件一樣...

但是typeNameCombobox_SelectedIndexChanged()中存在問題,錯誤消息指出:

無法綁定多部分標識符“ System.Data.DataRowView”。

並使用這種荒謬的方法

if (typeNameCombobox .SelectedValue.ToString() != "System.Data.DataRowView")
{
 fill -> typeNoCombobox
}

雖然這四個組合框是依賴的,但以下兩個組合框會填充第一個負載。

我使用第二種荒謬的方法

typeName.selectedIndex = 1;
typeName.selectedIndex = 0;
typeName.selectedIndex = 1;
typeName.selectedIndex = 0; 

(我必須使這個最小值達到4倍,因為有四個相關的組合框)

在所有組合框填充后,如果用戶更改typeName所有相關值都已更改,則沒有問題

有什么辦法可以使這段代碼清楚嗎?

回應后編輯:

tipTur =類型名稱tip =類型否desen =模式變量=變體

這是我的原始代碼

 ConnectionClassOleDb cc = new ConnectionClassOleDb();


    private void SiparisDetay_Load(object sender, EventArgs e) //formload
        {            

            sorgu = "Select distinct tipTurId, tipTur from View_Tip order by tipTur";
            cc.cbDoldur(sorgu, cbTipTur, "tipTur", "tipTurId"); 

            cbTipTur.SelectedIndex = 1;
            cbTipTur.SelectedIndex = 0;
            cbTipTur.SelectedIndex = 1;
            cbTipTur.SelectedIndex = 0;       

        }



    private void cbTipTur_SelectedIndexChanged(object sender, EventArgs e) 
        {
            if (cbTipTur.SelectedValue.ToString() != "System.Data.DataRowView")
            {
                string sorgu = "SELECT distinct tipNo FROM tblTip where " +
                    " tipTurId = '" + cbTipTur.SelectedValue.ToString() + "' ORDER BY tipNo";
                cc.cbDoldur(sorgu, cbTip, "tipNo", "tipNo");

            }
        }

        private void cbTip_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbTip.SelectedValue.ToString() != "System.Data.DataRowView")
            {
                string sorgu = "SELECT desen FROM tblTip WHERE " +
                    " tipTurId = '" + cbTipTur.SelectedValue.ToString() +
                    "' AND tipNo = '" + cbTip.SelectedValue.ToString() + "' order by desen";
                cc.cbDoldur(sorgu, cbDesen, "desen", "desen");
            }
        }

        private void cbDesen_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbDesen.SelectedValue.ToString() != "System.Data.DataRowView")
            {
                string sorgu = "SELECT varyant FROM tblTip WHERE " +
                               " desen = '" + cbDesen.SelectedValue.ToString() +
                               "' AND tipTurId = '" + cbTipTur.SelectedValue.ToString() +
                               "' AND tipNo = '" + cbTip.SelectedValue.ToString() + "' ORDER BY varyant";
                cc.cbDoldur(sorgu, cbVaryant, "varyant", "varyant");
            }
        }

和連接類中的代碼是這樣的:

public void cbDoldur(string sorgu, ComboBox cb, string text, string value) //fill combobox
        {        
            DataTable dtDdl = Dt(sorgu);
            cb.DataSource = dtDdl;
            cb.DisplayMember = text;
            cb.ValueMember = value;            

            if (cb.Items.Count > 0)
            {
                cb.SelectedIndex = 0;
            }

        }


 public DataTable Dt(string query)
        {

            DataTable dt = new DataTable();
            if (Open())
            {
                OleDbDataAdapter da = new OleDbDataAdapter(query, connection);
                try
                {
                    da.Fill(dt);

                }
                catch (Exception ex)
                {
                    MessageBox.Show("Sistem Mesajı:" + ex.Message, "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            //connection.Close();
            return dt;
        }

您應該嘗試將Alias添加到查詢中的字段名稱中

Select distinct tipTurId, tipTur from View_Tip

Select distinct tipTurId as tipTurId , tipTur from View_Tip

並且在這種情況下,還SELECT distinct tipNo FROM tblTip

SELECT distinct tipNo as tipNo FROM tblTip

因為因為它將以Distinct返回,所以將無法在DataSource中找到字段為tipTurId ,而tipNo的情況tipNo

我解決了在這樣的類中更改我的comboboxpopulate函數的問題

cb.DisplayMember = text;
cb.ValueMember = value;
cb.DataSource = dtDdl;  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM