0

私は学生で、プログラミングの初心者です。combobox1とcombobox2の2つのコンボボックスがあります。combobox1にはnokia、samsung、htcなどのモバイル会社が含まれ、combobox2にはsamsung、s3などのモバイルモデルが含まれています。つまり、2つのコンボボックスを並べ替えたいと思います。 combobox1でnokiaをクリックすると、nokiaのすべてのモデルがcombobo2のリストに表示されるはずなので、外部キーの関係を使用することにしました。

          Manufacturer -table
        - manufacturerid (primary key)
        - name

         Model -table
        - modelid (primary key)
        - manufacturerid (foreign key to manufacturer)
         - name

データの例:

メーカー表

         manufacturerid name
     -------------- ----------
    1              Nokia
    2              Samsung
    3              HTC

モデルテーブル

       modelid manufacturerid name
     ------- -------------- ----------
     1       1              C7
     2       1              Lumia 900
     3       1              Lumia 920
     4       2              Galaxy S II
     5       2              Galaxy S III
     6       3              Desire X
     7       3              Windows Phone 8X
     8       3              One S

最初のコンボボックスでnokiaを選択すると、2番目のコンボボックスでmanufactureid =1のすべてのモデルが選択されます。どうやってやるの?もともと私は使っていました

 private void comboBox4_SelectedIndexChanged(object sender, EventArgs e)
  {
     comboBox3.Text = "";
   if ("samsung" == comboBox4.SelectedItem.ToString())
      {
           comboBox3.DataSource = table1BindingSource;
           comboBox3.ValueMember = "samsung";
           comboBox3.DisplayMember = "samsung";
      }
   if ("htc" == comboBox4.SelectedItem.ToString())
      {
         comboBox3.DataSource = table1BindingSource;
         comboBox3.ValueMember = "htc";
          comboBox3.DisplayMember = "htc";
       }
  }

しかし、新しいモデルを追加するたびにsamsung文字列を更新する必要があるため、テーブルを操作して更新できるようにすることにしました。

4

3 に答える 3

2

次のようにデータベースからデータを取得する関数を含めます

public DataTable Select(String sqlQuery)
   {       
       con.Open();
       SqlDataAdapter adapter = new SqlDataAdapter(sqlQuery,con);
       DataTable table = new DataTable();
       adapter.Fill(table);
       con.Close();
       return table;
   }

Page_Loadイベントで

protected void Page_Load(object sender, EventArgs e)
{
   if(!Page.IsPostBack)
     {
      String sqlQuery="select manufacturerid,name From Manufacturertable";

      comboBox4.DataSource = cls.Select(sqlQuery);
      comboBox4.DataTextField = "name";
      comboBox4.DataValueField = "manufacturerid";
      comboBox4.DataBind();
   }
 }

とのSelectedIndexChanged場合comboBox4

protected void comboBox4_SelectedIndexChanged(object sender, EventArgs e) {
    String sqlQuery="select modelid,name From Modeltable where manufacturerid="+ Convert.ToInt16(comboBox4.SelectedValue.ToString());

    comboBox3.DataSource = cls.Select(sqlQuery);
    comboBox3.DataTextField = "name";
    comboBox3.DataValueField = "modelid";
    comboBox3.DataBind();
}
于 2012-12-31T07:12:22.227 に答える
2

最初のコンボボックスSelectedIndexChangedイベント(製造コンボボックス)で選択manufacturerid を取得し、このクエリを起動して他のコンボボックス(モデル)に入力します

Select modelid,name from modeltable where manufactuerid=@combox1Value

コード ビハインド サムシング このように、IDE を使用せずにこのコードを書きました。変更が必要な場合があります。

private void monufactureComobobox_SelectedIndexChanged(object sender, EventArgs e)
{

 string fecthManufacturerID= manufactureComobobox.selectedItem;
 DataTable dtModel = new DataTable();
 dtModel= ModelComboPopulate(fecthManufacturerID);
 ModelcomboBox.DataSource = dtModel;
 ModelcomboBox.ValueMember = "modelid";
 ModelcomboBox.DisplayMember = "name";

}

public DataTable ModelComboPopulate(string ID)
{
 DataSet ds = new DataSet();
 using (SqlConnection con = new SqlConnection(connection))
 {
    string myquery="Select modelid,name from modeltable where manufacturerid=@combox1Value";
    SqlCommand cmd = new SqlCommand(myquery, con);
    SqlDataAdapter dap = new SqlDataAdapter();
    dap.SelectCommand = cmd;
    cmd.Parameters.Add("@combox1Value", SqlDbType.NVarChar, 15).Value = ID;
    dap.Fill(ds);
    return ds.Tables[0];
  }

}
于 2012-12-31T07:13:28.253 に答える
2

DataSetまたはを使用DataTableして 2 つのテーブルを格納し、文字列をリスト string に入力しますstrArr。以下のようなもの:(少なくともロジックは機能するはずです

List<string> strArr = new List<string>();
strArr.Items.Clear();
for(int intSubCount = 0; intSubCount < dtTable2.Rows.Count;intSubCount++)
{
   if(MyComboBox.Text.Equals(dtTable2.Rows[intSubCount]["modelid"].ToString()))
   {
       strArr.Add(dtTable2.Rows[intSubCount]["name"].ToString());
   }
}
//
comboBox3.DataSource = strArr;

またはそうでなければ

簡単な方法は、使用することですDataView

  DataView dv =  dtTable1.defaultView;
  dv.RowFilter("modelid = '" + myComboBox.Text + "'");
  //use DataView to populate the Second ComboBox.
于 2012-12-31T07:42:56.667 に答える