【发布时间】:2016-03-01 14:26:58
【问题描述】:
我有带按钮的月历,当单击按钮并且月历中的选定日期等于数据库列中的值时,我使用了数据库中的 listbox.datasource,但之后当我在月历和选定日期不等于我想要返回我使用的列表的第一个数据源的列值。 请注意,我只使用: if(date.Equals("20160322")) 没有 foreach 它可以正常工作,但不能使用 foreach 循环遍历列
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < defaultList.Length; i++)
{
listBox1.Items.Add(defaultList[i]);
}
string date = monthCalendar1.SelectionStart.Date.ToString("yyyyMMdd");
string connetionString = null;
MySqlConnection connection;
MySqlCommand command;
MySqlDataAdapter adapter = new MySqlDataAdapter();
DataSet ds = new DataSet();
int i = 0;
string sql = null;
connetionString = "datasource=localhost; database=bokning;port=3306;username=root;password=666666";
sql = "select date,dayTime from newsystem where date='" + date + "'";
connection = new MySqlConnection(connetionString);
try
{
connection.Open();
command = new MySqlCommand(sql, connection);
adapter.SelectCommand = command;
adapter.Fill(ds);
adapter.Dispose();
command.Dispose();
connection.Close();
dtDatetime = ds.Tables[0];
foreach (DataRow dr in dtDatetime.Rows)
{
if (date.Equals(dr["date"]))
{
listBox1.DataSource = ds.Tables[0];
listBox1.ValueMember = "date";
listBox1.DisplayMember = "dayTime";
}
else
{
//listBox1.Items.Clear();
listBox1.DataSource = defaultList;
}
}
}
catch (Exception ex)
{
MessageBox.Show("Cannot open connection ! ");
}
}
【问题讨论】:
-
单步执行循环能给您带来什么?它对 date 和 dr["date"] 显示什么
-
Console.WriteLine(dr["date"]); foreach 内部给了我 20160322 ,这与月历(日期)中的选定日期相同。它更改了数据源,但是在选择了与 dr[date] 不匹配的新日期后,旧数据源没有回来,列中的新日期仍然在列表框中
-
我必须承认,粗略的一瞥告诉我,所有行都应该匹配——因为这就是你的 SQL 代码所要求的......因为你有一个 foreach,如果你有 4 个项目而第三个不匹配, listbox1 将是来自 sql 的数据源 - 如果没有匹配项......你不会进入 foreach - 因为没有行,所以我猜 datasource=defaultlist 永远不会达到,因为它总是匹配
-
datasource=defaultlist 如果我只是喜欢它; if (date.Equals("20160322")) { listBox1.DataSource = ds.Tables[0]; listBox1.ValueMember = "日期"; listBox1.DisplayMember = "dayTime"; } else { listBox1.DataSource = defaultList; }
-
完全正确 - 当前 if 位于您检索到的项目的 for 循环中,如果没有项目,则它无法执行 else。
标签: c# mysql listbox datasource monthcalendar