从mysql填充的comboBox中选择记录

时间:2013-04-26 17:32:51

标签: c#

我有一个填充comboBox的查询,并且对comboBox中的选择进行depanding将值传递给另一个查询。

我到目前为止的代码是:

    MySqlCommand SelectCommandAirport = new MySqlCommand("SELECT AirportName, DataTable  FROM    AirportList;", myConnAirport);
MySqlDataReader myAirportReader;
    myConnAirport.Open();

    myAirportReader = SelectCommandAirport.ExecuteReader();
    DataTable dataTable = new DataTable();
    dataTable.Columns.Add(new DataColumn("AirportName"));
    dataTable.Columns.Add(new DataColumn("DataTable"));
    comboBox1.DataSource = dataTable;
    comboBox1.ValueMember = "AirportName";
    comboBox1.DisplayMember = "DataTable";
try
    {
       while (myAirportReader.Read())
       {
          DataRow row = dataTable.NewRow();
          row["AirportName"] = myAirportReader[1];
          row["DataTable"] = myAirportReader[0];
          dataTable.Rows.Add(row);

          SelectAirport.sAirport = comboBox1.SelectedItem.ToString();
       }
     }
 catch (Exception ex)
     {
     MessageBox.Show(ex.Message);
     }

然后我有一个seond查询应该使用comboBox选择的结果作为第二个查询的变量。

    string airportid;
    airportid = SelectAirport.sAirport;
    MySqlCommand SelectCommand = new MySqlCommand("SELECT ArriveDepart, Flight, FlightDate, ScheduledTime, IATALookup, Terminal, RemarkswithTime, Logo   FROM '" + airportid + "' WHERE Flight = '" + this.flightno_txt.Text + "';", myConnFlight);

当我运行代码时,我收到一条SQL错误,上面写着“System.Data.DataRowView WHERE Flight =”。

因为这不起作用我可以假设代码是正确的。任何人都可以看到我出错的地方。

非常感谢提前。

DCJ

当我运行代码时,我得到一个显示内容的SQL错误

1 个答案:

答案 0 :(得分:0)

这称为级联下拉菜单 - 最好的例子是“选择你的国家,然后选择你的省”

ASP.Net现在提供了一个功能,使这个MUCH比以前更容易。如果你不能使用这个功能,你已经做的非常正确 - 选择一个,然后提交到下一个查询并从中加载框。

这是来自ASP.Net AJAX Library ... http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/CascadingDropDown/CascadingDropDown.aspx

此外,您在代码示例中还有额外的工作。当您运行ExecuteReader命令时,它会返回一个DataReader对象,该对象可以直接绑定到您的Control,就像这样......

MySqlCommand SelectCommandAirport = new MySqlCommand("SELECT AirportName, DataTable  FROM    AirportList;", myConnAirport);

MySqlDataReader myAirportReader;
myConnAirport.Open();

myAirportReader = SelectCommandAirport.ExecuteReader();
comboBox1.DataSource = dataTable;
comboBox1.ValueMember = "AirportName";
comboBox1.DisplayMember = "DataTable";
comboBox1.DataBind();

这比创建项目并将它们复制到组合框中更有效。

我怀疑您的SQL错误是因为您将AirportName视为表名,而不是数据值。所以,你的查询应该更像这样(我喜欢使用String.Format更清楚地表明字符串中的参数位置):

String.Format("SELECT ArriveDepart, Flight, FlightDate, ScheduledTime, IATALookup,
    Terminal, RemarkswithTime, Logo  
    FROM AIRPORT_TABLE WHERE AirportName = '{0}'
         AND Flight = {1}", airportId, flightno_txt.Text)

并且您需要将AIRPORT_TABLE替换为表的实际名称,如果这确实是它应该工作的方式。只是一个猜测。