masalah dengan pengisian kotak kombo yang bergantung

Saya memiliki formulir windows dan parameter kain pilihan pengguna dari kotak kombo seperti metode negara-negara-kota. dan parameter saya adalah:

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.

Saya mengisi typeNameCombobox di formLoad setelah itu typeNoCombobox mengisi acara typeNameCombobox_SelectedIndexChanged() dan seperti ini patternCombobox mengisi acara typeNoCombobox_SelectedIndexChanged() ...

tetapi ada masalah di typeNameCombobox_SelectedIndexChanged() pesan kesalahan mengatakan bahwa:

Pengidentifikasi multi-bagian "System.Data.DataRowView" tidak dapat diikat.

dan menggunakan metode yang tidak masuk akal ini

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

Meskipun keempat kotak kombo ini bergantung, kotak kombo di bawah ini tidak terisi pada muatan pertama.

dan saya menggunakan metode absurd kedua

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

(Saya harus membuat ini minimal 4 kali karena ada empat kotak kombo yang bergantung)

setelah semua kotak kombo terisi tidak ada masalah jika pengguna mengubah typeName semua nilai dependen berubah

apakah ada cara untuk membuat kode ini dengan jelas?

edit setelah respons:

tipTur=nama tipe tip = tipeNo desen = variasi pola = varian

ini kode asli saya

 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");
            }
        }

dan kode di kelas koneksi seperti ini:

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

person Rapunzo    schedule 27.06.2011    source sumber
comment
Bisakah Anda menunjukkan kodenya, menurut saya Anda salah mengikat kueri dependen   -  person V4Vendetta    schedule 27.06.2011
comment
Oke saya tambahkan kode asli yang saya gunakan   -  person Rapunzo    schedule 27.06.2011
comment
Bagaimana kalau mengubah distinct tipNo as tipNo, menambahkan alias dan juga distinct tipTurId as tipTurId   -  person V4Vendetta    schedule 27.06.2011


Jawaban (2)


Anda harus mencoba menambahkan Alias ​​ke nama bidang dalam kueri

Select distinct tipTurId, tipTur from View_Tip

To

Select distinct tipTurId as tipTurId , tipTur from View_Tip

Dan juga dalam hal ini SELECT distinct tipNo FROM tblTip ke

SELECT distinct tipNo as tipNo FROM tblTip

karena akan gagal menemukan bidang di DataSource sebagai tipTurId karena akan dikembalikan dengan Distinct , sama halnya dengan tipNo

person V4Vendetta    schedule 27.06.2011
comment
tidak, tidak berfungsi dan saya melihat visualisator kumpulan data dan ada nama bidang yang dapat Anda lihat tautan - person Rapunzo; 27.06.2011

Saya memecahkan masalah saya untuk mengubah fungsi komboboxpopulate saya di kelas seperti ini

cb.DisplayMember = text;
cb.ValueMember = value;
cb.DataSource = dtDdl;  
person Rapunzo    schedule 28.06.2011