簡體   English   中英

c#winform從組合框選擇中顯示數據庫數據

[英]c# winform display database data from combobox selection

我有一個檢查按鈕,它將在組合框中獲取月份和年份:

private void cmdSend_Click(object sender, System.EventArgs e)
    {
        List<string>[] list;
        list = dbConnect.Select(month_list.SelectedItem.ToString(), year_list.SelectedItem.ToString());

        printer_info.Rows.Clear();
        for (int i = 0; i < list[0].Count; i++)
        {
            int number = printer_info.Rows.Add();
            printer_info.Rows[number].Cells[0].Value = list[0][i];
            printer_info.Rows[number].Cells[1].Value = list[1][i];
            printer_info.Rows[number].Cells[2].Value = list[2][i];
            printer_info.Rows[number].Cells[3].Value = list[3][i];
        }
    }  

在此處輸入圖片說明

然后,復選按鈕將月份和年份傳遞給選擇語句功能:

public List<string>[] Select(string month,string year)
    {
        string query = "SELECT * FROM page_counter WHERE month = '@month' AND year = @year;";

        //Create a list to store the result
        List<string>[] list = new List<string>[4];
        list[0] = new List<string>();
        list[1] = new List<string>();
        list[2] = new List<string>();
        list[3] = new List<string>();

        //Open connection
        if (this.OpenConnection() == true)
        {
            //Create Command
            MySqlCommand cmd = new MySqlCommand(query, connection);
            cmd.Parameters.Add("@month",MySqlDbType.VarChar);
            cmd.Parameters.Add("@year", MySqlDbType.Year);
            cmd.Parameters["@month"].Value = month;
            cmd.Parameters["@year"].Value = year;

            //Create a data reader and Execute the command
            MySqlDataReader dataReader = cmd.ExecuteReader();

            //Read the data and store them in the list
            while (dataReader.Read())
            {
                list[0].Add(dataReader["id"].ToString() + "");
                list[1].Add(dataReader["month"].ToString() + "");
                list[2].Add(dataReader["year"].ToString() + "");
                list[3].Add(dataReader["page_count"].ToString() + "");
            }

            //close Data Reader
            dataReader.Close();

            //close Connection
            this.CloseConnection();

            //return list to be displayed
            return list;
        }  

然后,數據將顯示在gridview上,其中在頁面設計器中默認指定了所有列:
在此處輸入圖片說明

當我運行代碼時,它沒有任何錯誤,但是在gridview上沒有顯示任何值。 我有什么錯誤嗎? 我是c#winform的新手,請告知。

我認為您有兩個錯誤:首先應從查詢字符串中刪除single-quotes

string query = "SELECT * FROM page_counter WHERE month = @month AND year = @year;"

因為當您使用單引號將參數名稱視為實際值時,其次,我強烈建議您對項目使用類而不是List<string>[] 。該類如下所示:

public class Data
{
    public int Id { get; set; }
    public string Month { get; set; }
    public string Year { get; set; }
    public int PageCount { get; set; }
}

然后創建一個List<Data>並像這樣填充它:

 var dataList = new List<Data>();
 while (dataReader.Read())
 {
    var item = new Data();
    item.Id = Convert.Toınt32(dataReader["id"]);
    item.Month = dataReader["month"].ToString();
    item.Year = dataReader["year"].ToString();
    item.PageCount = Convert.ToInt32(dataReader["page_count"]);
    dataList.Add(item);
}
return dataList;

然后當然可以更改方法的返回類型:

public List<Data> Select(string month,string year)

然后,您需要做的就是設置DataSource屬性:

var list = dbConnect.Select(month_list.SelectedItem, year_list.SelectedItem);
printer_info.DataSource = list;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM