DataGrid 的使用
一:从文本文件中读取数据,并保存到DataSet中
public static DataSet TextFileLoader(string FilePath, string TableName, string[] FieldsInArray)
{
DataSet ds = new DataSet();
DataTable dt = new DataTable(TableName);
FileStream fs = File.Open(FilePath, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("GB2312"));
//设置列名
for (int i = 0; i < FieldsInArray.Length; i++)
{
dt.Columns.Add(new DataColumn(FieldsInArray[i], typeof(string)));
}
string strRead;
bool flag = true;
while (flag)
{
strRead = sr.ReadLine();
if (!string.IsNullOrEmpty(strRead))
{
string[] aryVale = strRead.Split(',');
DataRow dr = dt.NewRow();
for (int k = 0; k < aryVale.Length; k++)
{
dr[FieldsInArray[k]] = aryVale[k];
}
dt.Rows.Add(dr);
}
else
{
flag = false;
}
}
ds.Tables.Add(dt);
return ds;
}
//文本文件显示
private void button1_Click(object sender, EventArgs e)
{
string[] FieldsInArray = { "epc", "cardno", "user" };
DataSet ds = new DataSet();
ds = TextFileLoader(strFileName, "record", FieldsInArray);
dataGrid1.DataSource = ds.Tables[0];
}
二:数据库中提取
SqlCeConnection sqlceConn = null;
SqlCeDataReader sqlceReader = null;
sqlceConn = new SqlCeConnection(strDBConnectString);
sqlceConn.Open();
SqlCeCommand sqlceCmd = new SqlCeCommand("select count(*) from T_test", sqlceConn);
int i = Convert.ToInt32(sqlceCmd.ExecuteScalar());
sqlceCmd = new SqlCeCommand("select * from T_test", sqlceConn);
SqlCeDataAdapter sqladapter = new SqlCeDataAdapter(sqlceCmd);
//将DataSet和DataTable关联
DataSet ds = new DataSet();
ds.Tables.Add("T_test");
DataTable dt = new DataTable();
dt = ds.Tables["T_test"];
//在现实时,增加递增字段
dt.Columns.Add(new DataColumn("ID", typeof(int)));
dt.Columns[0].AutoIncrement = true;
dt.Columns[0].AutoIncrementSeed = 3;
sqladapter.Fill(ds, "T_test");
sqlceConn.Close();
dt.Columns[0].ColumnName = "编号";
dt.Columns[1].ColumnName = "数据库编号";
dt.Columns[2].ColumnName = "姓名";
dt.Columns[3].ColumnName = "次数";
dataGrid1.DataSource = dt;
三:自动调整列宽
public void SizeColumnsToContent(DataGrid dataGrid, int nRowsToScan, DataTable _dataTable)
{
// Create graphics object for measuring widths.
Graphics Graphics = dataGrid.CreateGraphics();
// Define new table style.
DataGridTableStyle tableStyle = new DataGridTableStyle();
try
{
DataTable dataTable = _dataTable;
if (-1 == nRowsToScan)
{
nRowsToScan = dataTable.Rows.Count;
}
else
{
// Can only scan rows if they exist.
nRowsToScan = System.Math.Min(nRowsToScan, dataTable.Rows.Count);
}
// Clear any existing table styles.
dataGrid.TableStyles.Clear();
// Use mapping name that is defined in the data source.
tableStyle.MappingName = dataTable.TableName;
//设置grid中蓝白交错效果
//tableStyle.AlternatingBackColor = Color.LightBlue;
//tableStyle.BackColor = Color.White;
// Now create the column styles within the table style.
DataGridTextBoxColumn columnStyle;
int iWidth;
for (int iCurrCol = 0; iCurrCol < dataTable.Columns.Count; iCurrCol++)
{
DataColumn dataColumn = dataTable.Columns[iCurrCol];
columnStyle = new DataGridTextBoxColumn();
//columnStyle.TextBox.Enabled = true;
columnStyle.HeaderText = dataColumn.ColumnName;
columnStyle.MappingName = dataColumn.ColumnName;
// Set width to header text width.
iWidth = (int)(Graphics.MeasureString(columnStyle.HeaderText, dataGrid.Font).Width);
// Change width, if data width is wider than header text width.
// Check the width of the data in the first X rows.
DataRow dataRow;
for (int iRow = 0; iRow < nRowsToScan; iRow++)
{
dataRow = dataTable.Rows[iRow];
if (null != dataRow[dataColumn.ColumnName])
{
int iColWidth = (int)(Graphics.MeasureString(dataRow.ItemArray[iCurrCol].ToString(), dataGrid.Font).Width);
iWidth = (int)System.Math.Max(iWidth, iColWidth);
}
}
columnStyle.Width = iWidth + 20;
// Add the new column style to the table style.
tableStyle.GridColumnStyles.Add(columnStyle);
}
// Add the new table style to the data grid.
dataGrid.TableStyles.Add(tableStyle);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
finally
{
Graphics.Dispose();
}
}
四:选中行时得反映,初步这两个可以加起来可以做到
//行或列选择发生变化时响应
private void dataGrid1_CurrentCellChanged(object sender, EventArgs e)
{
dataGrid1.Select(dataGrid1.CurrentCell.RowNumber);
MessageBox.Show("1 " + dataGrid1.CurrentCell.RowNumber.ToString());
}
//列选中列时发生响应
private void dataGrid1_MouseUp(object sender, MouseEventArgs e)
{
System.Drawing.Point pt = new Point(e.X, e.Y);
DataGrid.HitTestInfo hti = dataGrid1.HitTest(pt.X, pt.Y);
if (hti.Type == DataGrid.HitTestType.Cell)
{
dataGrid1.CurrentCell = new DataGridCell(hti.Row, hti.Column);
dataGrid1.Select(hti.Row);
MessageBox.Show("2 " + hti.Row.ToString());
}
}
private void createDataGridStyle()
{
DataTable tmpDt = new DataTable("T_QueryRecord");
string[] HeaderText = { "序号", "车牌号", "印刷卡号", "检测时间" };
for (int i = 0; i < HeaderText.Length; i++)
{
tmpDt.Columns.Add(HeaderText[i], typeof(string));
}
this.dg_QueryRecord.DataSource = tmpDt;
}
private void InitDataGridColumnHeader()
{
dg_QueryRecord.TableStyles.Clear();
DataGridTableStyle dts = new DataGridTableStyle();
dts.MappingName = "T_QueryRecord";
dg_QueryRecord.TableStyles.Add(dts);
dg_QueryRecord.TableStyles[0].GridColumnStyles.Clear();
DataGridTextBoxColumn colID = new DataGridTextBoxColumn();
colID.Width = 40;
colID.HeaderText = "序号";
colID.MappingName = "序号";
dg_QueryRecord.TableStyles[0].GridColumnStyles.Add(colID);
DataGridTextBoxColumn colName = new DataGridTextBoxColumn();
colName.Width = 50;
colName.HeaderText = "车牌号";
colName.MappingName = "车牌号";
dg_QueryRecord.TableStyles[0].GridColumnStyles.Add(colName);
DataGridTextBoxColumn colSL1 = new DataGridTextBoxColumn();
colSL1.Width = 70;
colSL1.HeaderText = "印刷卡号";
colSL1.MappingName = "印刷卡号";
dg_QueryRecord.TableStyles[0].GridColumnStyles.Add(colSL1);
DataGridTextBoxColumn colSL2 = new DataGridTextBoxColumn();
colSL2.Width = 140;
colSL2.HeaderText = "检测时间";
colSL2.MappingName = "检测时间";
dg_QueryRecord.TableStyles[0].GridColumnStyles.Add(colSL2);
}
private string strCheckRecordUseVehicleNo = @"Select strVehicleNo as 车牌号,
strPrintNo as 印刷卡号,
strCheckTime as 检测时间
from T_CheckRecord where strVehicleNo LIKE @QstrVehicleNo";