【问题标题】:Winforms Datagridview Sort by Combobox DisplaymemberWinforms Datagridview 按组合框显示成员排序
【发布时间】:2015-08-20 15:55:21
【问题描述】:

我有一个问题,我试图通过 Combobox DisplayMember 而不是 ValueMember 对 Datagridview 进行排序。

Datagridview 数据绑定到从 SQL 查询填充的 Datatable,Combobox 由 LinqQuery 的结果填充。

表单填充 Datagridview 和排序的代码隐藏

Dictionary<string, string> search = new Dictionary<string, string>();
            search.Add("ID", "ID");
            search.Add("ClientID", "ClientID");
            search.Add("ClientCode", "ClientCode");
            search.Add("BatchRef", "BatchRef");
            search.Add("CaseRef", "CaseRef");
            search.Add("AccountNo", "AccountNo");
             search.Add("MeterName", "MeterName");
            search.Add("MeterAddress", "MeterAdd");
            search.Add("MeterPostcode", "MeterPostcode");
            search.Add("AgentID", "AgentID");
            search.Add("CompletedDate", "CompletedDate");
            search.Add("SubmittedDate", "SubmittedDate");

            Systems.PopulateDataGrid(search, dgvSearch, SQLHelper.FillDataTable(sql, CommandType.Text, searchParameters));

private void dgvSearch_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            ListSortDirection direction;

            if (dgvSearch.Columns[e.ColumnIndex].HeaderText == "Agent")
            {
                if (dgvSearch.SortOrder == System.Windows.Forms.SortOrder.Ascending)
                    direction = ListSortDirection.Descending;
                else
                    direction = ListSortDirection.Ascending;

                dgvSearch.Sort(dgvSearch.Columns[e.ColumnIndex], direction);
            }
        }

Systems.PopulateDatagrid

 internal static void PopulateDataGrid(Dictionary<string, string> dataGrid, DataGridView dgv, DataTable dt)
        {
            dgv.AutoGenerateColumns = false;
            foreach (KeyValuePair<string, string> row in dataGrid)
            {
                dgv.Columns[row.Key].DataPropertyName = row.Value;
            }
            dgv.DataSource = dt;
        }

SQLHelper.FillDatatable

internal static DataTable FillDataTable(string strSQL, CommandType CT, List<SqlParameter> parameters)
        {
            var ds = new DataSet("UMDS");
            DataTable dt = ds.Tables.Add("UMDT");
            ds.EnforceConstraints = false;

            using (var cn = new SqlConnection(SQLHelper.ConnectionString))
            {
                using (var cmd = new SqlCommand(strSQL, cn))
                {
                    cmd.CommandType = CT;

                    if (parameters != null)
                    {
                        DateTime dateTime;

                        foreach (SqlParameter p in parameters)
                        {
                            if (p.Value == null || string.IsNullOrEmpty(p.Value.ToString()) || p.Value.ToString() == Systems.MASKEDDATE || p.Value.ToString() == Systems.MASKEDTIME)
                            {
                                p.Value = DBNull.Value;
                            }
                            else if (DateTime.TryParse(p.Value.ToString(), out dateTime))
                            {
                                p.Value = dateTime;
                            }
                            cmd.Parameters.Add(p);
                        }
                    }

                    try
                    {
                        cn.Open();
                        using (SqlDataReader dr = cmd.ExecuteReader())
                        {
                            dt.Load(dr);
                        }

                    }
                    catch (SqlException ex)
                    {
                        Systems.Msg("Database Error", "Error Loading Data from Database. Please try again.\n\n" + ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            return dt;
        }

单击“AgentID”的标题时,它按 ValueMember 而不是 DisplayMember 排序。

【问题讨论】:

  • Systems ? SQLHelper ?
  • @jstreet 已添加,谢谢

标签: winforms datagridview combobox


【解决方案1】:

回答我自己的问题:

经过一番谷歌搜索后,设法找到另一个 SO 问题的答案。

Sorting DataGridView by Column.DisplayMember

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 2023-03-20
    • 2013-08-10
    相关资源
    最近更新 更多