我的datagird控件在显示数据库数据后,每一列的单元格里显示的内容不会根据字段的大小而改变,所以说有很多字都看不到,像这种问题该怎么解决?
[此贴子已经被作者于2006-8-31 15:53:58编辑过]
private void Form1_Load(object sender, System.EventArgs e)
{
string conString = "Provider=Microsoft.Jet.OlEDB.4.0;Persist Security Info = False;" +
"Data Source = D:\\KFGL.MDB";
string sql = "Select * From 客房预定表";
OleDbConnection Conn = new OleDbConnection(conString); //建立Connection对象
Conn.Open(); //打开连接
OleDbDataAdapter Adapter = new OleDbDataAdapter(sql,Conn);
DataSet dataSet = new DataSet();
Adapter.Fill(dataSet,"客房预定表");
dataGrid1.SetDataBinding(dataSet,"客房预定表"); //将数据源绑定到DataGrid控件
Conn.Close();
//设置DataGrid控件数据表样式
DataGridTableStyle dataGridStyle = new DataGridTableStyle();
dataGridStyle.MappingName = dataSet.Tables[0].TableName; //映射到数据表样式的名称
//建立数据行样式DataGridTextBoxColumn类
DataGridTextBoxColumn NumColumn = new DataGridTextBoxColumn();
NumColumn.MappingName = "编号";
NumColumn.HeaderText = "编号";
NumColumn.Width = GetFieldLong(dataSet,dataSet.Tables[0].TableName,"编号");
dataGridStyle.GridColumnStyles.Add(NumColumn);
DataGridTextBoxColumn NameColumn = new DataGridTextBoxColumn();
NameColumn.MappingName = "姓名";
NameColumn.HeaderText = "姓名";
NameColumn.Width = GetFieldLong(dataSet,dataSet.Tables[0].TableName,"姓名");
dataGridStyle.GridColumnStyles.Add(NameColumn);
DataGridTextBoxColumn PasswordColumn = new DataGridTextBoxColumn();
PasswordColumn.MappingName = "证件号";
PasswordColumn.HeaderText = "证件号";
PasswordColumn.Width = GetFieldLong(dataSet,dataSet.Tables[0].TableName,"证件号");
dataGridStyle.GridColumnStyles.Add(PasswordColumn);
dataGrid1.TableStyles.Add(dataGridStyle); //添加数据表样式
}
//建立一个Function,用来求得数据表某列的最大长度,
//第一个参数为DataSet对象,第二个参数为数据表的名称,第三个参数为字段名。
//返回值为int
private int GetFieldLong(DataSet dataSet, string tableName, string fieldName)
{
Graphics graphics = dataGrid1.CreateGraphics();
Font font = dataGrid1.Font;
int offset = (int) graphics.MeasureString(" ",font).Width; //求得" "的宽度。
int MaxLong = 0; //存放最长的值
int templong = 0; //存放某行字段的长度
string fieldValue = null;
int rowCount = dataSet.Tables[tableName].Rows.Count; //得到记录总数
for(int i = 0;i < rowCount;i++)
{
fieldValue = dataSet.Tables[tableName].Rows[i][fieldName].ToString(); //得到该行字段的值
templong = (int) graphics.MeasureString(fieldValue,font).Width; //获取该字段的宽度
//如果templong的宽度是大于Maxlong,就记录下它
if(templong > MaxLong)
MaxLong = templong;
}
graphics.Dispose();
return offset + MaxLong ;
}
我从网上找到了,不过有缺点,缺点我写在最后:
1、新建立一个 DataGridTableStyle
DataGridTableStyle dtstyle= new DataGridTableStyle();
2、绑定数据源
dtstyle.MappingName=TableName;
3、设定
dg.TableStyles.Clear();
dg.TableStyles.Add(dtstyle);
dg.TableStyles[TableName].GridColumnStyles[ColumnName].Width=200
注意: dg.TableStyles[TableName].GridColumnStyles[ColumnName].Width=200
这里有问题.