DataGridView
当我尝试通过单击列标题对我的某个列进行排序时,出现异常。我知道发生这种情况是因为 columname 包含一个空格。
我现在的问题是:单击标题时如何在名称周围加上方括号?
我还没有找到标题单击事件的属性或类似的东西来动态避免此类问题。有没有不更改文件或数据表中的名称的解决方案?
DataGridView
当我尝试通过单击列标题对我的某个列进行排序时,出现异常。我知道发生这种情况是因为 columname 包含一个空格。
我现在的问题是:单击标题时如何在名称周围加上方括号?
我还没有找到标题单击事件的属性或类似的东西来动态避免此类问题。有没有不更改文件或数据表中的名称的解决方案?
当从数据库表中检索数据时,最好使用字段别名,例如 SELECT [First Name ]As FirstName,然后将 DataGridView 数据源设置为 DataTable,然后将 DataColumn 标题文本设置为字段名称,例如 DataGridView1。列[“名字”] =“名字”。这是对 FirstName 的 FirstName 别名进行的排序。
这是代码,请参见下面的代码屏幕截图,表格数据和代码重点关注概念。
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";
}
}
}