1

DataGridView列ヘッダーをクリックして特定の列を並べ替えようとすると、例外が発生します。これは、列名に空白が含まれているために発生することを知っています。

私の質問は次のとおりです。ヘッダーをクリックしたときに名前を角括弧で囲む方法は?

この種の問題を動的に回避するためのヘッダー クリック イベントのプロパティまたは同様のプロパティはまだ見つかりません。ファイルまたはデータテーブルの名前を変更せずに解決策はありますか?

4

2 に答える 2

1

列のフィールド名にスペースが含まれるデータベース テーブルからデータを取得する場合は、SELECT [First Name ]As FirstName などのフィールド エイリアスを使用してから、DataGridView DataSource を DataTable に設定し、次に DataColumn ヘッダー テキストをフィールド名 (DataGridView1 など) に設定することをお勧めします。 Columns[“名”] = “名”. これは、First Name の FirstName エイリアスに対して行われる amy ソートでした。

于 2016-01-31T17:04:03.297 に答える
0

これがコードです。以下のコードのスクリーンショット、シートデータ、および概念に焦点を当てたコードを参照してください。

using System;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Windows.Forms;

namespace Example_C1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public string ConnectionString(string FileName, string Header)
        {
            OleDbConnectionStringBuilder Builder = new OleDbConnectionStringBuilder();
            if (System.IO.Path.GetExtension(FileName).ToUpper() == ".XLS")
            {
                Builder.Provider = "Microsoft.Jet.OLEDB.4.0";
                Builder.Add("Extended Properties", string.Format("Excel 8.0;IMEX=1;HDR={0};", Header));
            }
            else
            {
                Builder.Provider = "Microsoft.ACE.OLEDB.12.0";
                Builder.Add("Extended Properties", string.Format("Excel 12.0;IMEX=1;HDR={0};", Header));
            }

            Builder.DataSource = FileName;

            return Builder.ConnectionString;
        }

        public DataTable LoadData(string FileName, string SheetName, DateTime TheDate)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            DataTable dt = new DataTable();

            using (OleDbConnection cn = new OleDbConnection { ConnectionString = ConnectionString(FileName, "Yes") })
            {
                cn.Open();
                using (OleDbCommand cmd = new OleDbCommand { CommandText = 
                    @"
                        SELECT 
                            [Dates], 
                            [Office Plan] As OfficePlan 
                        FROM [Sheet2$] 
                        WHERE [Dates] = #8/21/2013#", Connection = cn })
                {
                    OleDbDataReader dr = cmd.ExecuteReader();
                    dt.Load(dr);
                }

                return dt;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DateTime TheDate = new DateTime(2010, 8, 21);
            DataGridView1.DataSource = LoadData(
                Path.Combine(Application.StartupPath, "WS1.xlsx"), "Sheet2", TheDate).DefaultView;
            DataGridView1.Columns["OfficePlan"].HeaderText = "Office Plan";
        }
    }
}

where条件があるのは、私が行った既存の例を使用したことに注意してください。 ここに画像の説明を入力

于 2016-01-31T17:26:02.737 に答える