我有一个填充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错误
答案 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替换为表的实际名称,如果这确实是它应该工作的方式。只是一个猜测。