经典问题!征集asp.net区datagrid模板列固定列宽度最佳解决方案! 征集.net区datagrid模板列固定列宽度最佳解决方案!有人知道的话就发一下吧!可以帮助更多的人up可以,但是拒绝发一些与标题无关的代码! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://dotnet.aspx.cc/ShowDetail.aspx?id=A27CA611-2DE7-432D-8DBC-1512CEFDAA53 .net区真是一群笨蛋!两天了就一个抢分的人发了一个无法访问的贴!我还是自己搞吧! style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all"在DataGrid属性里面加入这个试试 为 DataGrid 添加模板列理论上可以设置文本框的任何属性TemplateColumn 类中有一个属性叫 ItemTemplate,此对象就是用来设置 TemplateColumn 的样式和属性的,此对象是对 ITemplate 接口的实现,因此只需实现 ITemplate 接口即可生成各种 TemplateColumn,然后再将 ITemplate 的实现类的对象对应到 TemplateColumn.ItemTemplate,最后再将 TemplateColumn 加到 DataGrid ,即可完成向 DataGrid 中加入一行指定模式的模板列。下面是一个 TextBox 模板列类的示例,另附此类的调用方式:要实现 Itemplate ,需实现其中的一个方法: public void InstantiateIn(Control container)此方法用于将一个控件加到模板列中,并可在此添加事件,如: tb.DataBinding += new EventHandler(this.OnDataBinding);以确定在有数据绑定时连带要完成的工作。public class TextItemTemplate : ITemplate { //TemplateColumn 类中有一个属性叫 ItemTemplate, //此对象就是用来设置 TemplateColumn 的样式和属性的,是对 ITemplate 接口的实现, //因此只需实现 ITemplate 接口即可生成各种 TemplateColumn //本类是对 ITemplate 接口的 TextBox 的实现,生成本类的对象 //然后再将 TemplateColumn.Itemtemplate 设为本类的对象,即可生成一个文本框列 private System.Data.DataColumn dColumn = null; private string strColumnName =""; private int iWidth = 100; //文本框宽 private int iHeight = 20; //文本框高 private int iMaxLength = 0; //文本框中最大字符数, 0 为无限制 private Color cBackColor = Color.Empty; //背景色 public int Width { get { return iWidth; } set { iWidth = value; } } public int Height { get { return iHeight; } set { iHeight = value; } } public Color BackColor { get { return cBackColor; } set { cBackColor = value; } } public int MaxLength { get { return iMaxLength; } set { iMaxLength = value; } } public TextItemTemplate(string ColumnName) { strColumnName = ColumnName; } public TextItemTemplate(System.Data.DataColumn column) { dColumn = column; strColumnName = dColumn.ColumnName; } public void InstantiateIn(Control container) { TextBox tb = new TextBox(); tb.DataBinding += new EventHandler(this.OnDataBinding); container.Controls.Add(tb); } public void OnDataBinding(object sender, EventArgs e) { TextBox tb = (TextBox)sender; tb.Width = this.iWidth; tb.Height = this.iHeight; tb.MaxLength = this.iMaxLength; tb.BackColor = this.cBackColor; DataGridItem dgi = (DataGridItem)tb.NamingContainer; tb.Text = ((DataRowView)dgi.DataItem)[strColumnName].ToString(); } }TextTemplateColumn 类的调用方式private void SetGridStyle(){ DataTable dt = (DataTable)ViewState["dtOfGrid"]; //取数据源泉 TemplateColumn tc; TextItemTemplate tit; tc = new TemplateColumn(); tit = new TextItemTemplate(dt.Columns[0]); //生成一个新的文本框模板列对象 tit.Height = 25; //文本框高度,缺省为 20 tit.Width = 150; //文本框宽度,缺省为 100 tit.MaxLength = 2; //最多输入两个字符,不设的话将无限制 tc.ItemTemplate = tit; //将文本框添加到模板列 DataGrid1.Columns.Add(tc); //将文本框模板列加入 DataGrid DataGrid1.Columns[0].HeaderStyle.Width = 100; tc = new TemplateColumn(); tit = new TextItemTemplate(dt.Columns[1]); tit.Height = 30; tit.Width = 100; tit.MaxLength = 5; tc.ItemTemplate = tit; DataGrid1.Columns.Add(tc); DataGrid1.Columns[1].HeaderStyle.Width = 100; tc = new TemplateColumn(); tit = new TextItemTemplate(dt.Columns[2]); tit.MaxLength = 5; tc.ItemTemplate = tit; DataGrid1.Columns.Add(tc); DataGrid1.Columns[2].HeaderStyle.Width = 100; DataGrid1.Columns[2].HeaderText = "C";} 楼主的态度请端正一点.别人帮你,即使不成功也请多点风度.在模板中,控制列宽度是最容易的了.你可以把所有模板里面的控件均设置成100%,然后用datagrid中的列宽来控制宽度.主要一个要点是,要设置列的页眉不换行(nowrap.)列宽的设置主要用控件的"属性生成器"来进行,简单又方便.下面一段设置后的例子.<HeaderStyle Wrap="False" HorizontalAlign="Center" Width="40px"></HeaderStyle> 我这样设置了,还是有换行,还有怎么样设置标头文本,而不用SQL语句的AS 啊?我这样不行: dgFind.Columns(2).HeaderText=""sdfsdf" 关于网站问题,急急急 接口怎么实现多态??? textbox.和label 无刷新显示数据 如何让程序默认读取自定义的user.config,而不读取web.config? asp.net 如何实现这个查询功能? 程序动态创建控件数组???高手来看看 100分求救MailMessage发送邮件的老问题(按各位大侠说的做了,还是不行啊!),发贴子啊。 WinXP Home版需要装什么软件后,可以开发、调试ASP.Net程序. WEBFORM从基类中继承后,就无法从vs.net打开它的窗体进行可视化属性设置,怎么办? TableCell 学习ASP.NET应该买哪几本书?
在DataGrid属性里面加入这个试试
public void InstantiateIn(Control container)
此方法用于将一个控件加到模板列中,并可在此添加事件,如:
tb.DataBinding += new EventHandler(this.OnDataBinding);
以确定在有数据绑定时连带要完成的工作。public class TextItemTemplate : ITemplate
{
//TemplateColumn 类中有一个属性叫 ItemTemplate,
//此对象就是用来设置 TemplateColumn 的样式和属性的,是对 ITemplate 接口的实现,
//因此只需实现 ITemplate 接口即可生成各种 TemplateColumn
//本类是对 ITemplate 接口的 TextBox 的实现,生成本类的对象
//然后再将 TemplateColumn.Itemtemplate 设为本类的对象,即可生成一个文本框列
private System.Data.DataColumn dColumn = null;
private string strColumnName ="";
private int iWidth = 100; //文本框宽
private int iHeight = 20; //文本框高
private int iMaxLength = 0; //文本框中最大字符数, 0 为无限制
private Color cBackColor = Color.Empty; //背景色 public int Width
{
get
{
return iWidth;
}
set
{
iWidth = value;
}
}
public int Height
{
get
{
return iHeight;
}
set
{
iHeight = value;
}
}
public Color BackColor
{
get
{
return cBackColor;
}
set
{
cBackColor = value;
}
}
public int MaxLength
{
get
{
return iMaxLength;
}
set
{
iMaxLength = value;
}
}
public TextItemTemplate(string ColumnName)
{
strColumnName = ColumnName;
}
public TextItemTemplate(System.Data.DataColumn column)
{
dColumn = column;
strColumnName = dColumn.ColumnName;
}
public void InstantiateIn(Control container)
{
TextBox tb = new TextBox();
tb.DataBinding += new EventHandler(this.OnDataBinding);
container.Controls.Add(tb);
}
public void OnDataBinding(object sender, EventArgs e)
{
TextBox tb = (TextBox)sender;
tb.Width = this.iWidth;
tb.Height = this.iHeight;
tb.MaxLength = this.iMaxLength;
tb.BackColor = this.cBackColor;
DataGridItem dgi = (DataGridItem)tb.NamingContainer;
tb.Text = ((DataRowView)dgi.DataItem)[strColumnName].ToString();
}
}TextTemplateColumn 类的调用方式
private void SetGridStyle()
{
DataTable dt = (DataTable)ViewState["dtOfGrid"]; //取数据源泉
TemplateColumn tc;
TextItemTemplate tit; tc = new TemplateColumn();
tit = new TextItemTemplate(dt.Columns[0]); //生成一个新的文本框模板列对象
tit.Height = 25; //文本框高度,缺省为 20
tit.Width = 150; //文本框宽度,缺省为 100
tit.MaxLength = 2; //最多输入两个字符,不设的话将无限制
tc.ItemTemplate = tit; //将文本框添加到模板列
DataGrid1.Columns.Add(tc); //将文本框模板列加入 DataGrid
DataGrid1.Columns[0].HeaderStyle.Width = 100;
tc = new TemplateColumn();
tit = new TextItemTemplate(dt.Columns[1]);
tit.Height = 30;
tit.Width = 100;
tit.MaxLength = 5;
tc.ItemTemplate = tit;
DataGrid1.Columns.Add(tc);
DataGrid1.Columns[1].HeaderStyle.Width = 100; tc = new TemplateColumn();
tit = new TextItemTemplate(dt.Columns[2]);
tit.MaxLength = 5;
tc.ItemTemplate = tit;
DataGrid1.Columns.Add(tc);
DataGrid1.Columns[2].HeaderStyle.Width = 100;
DataGrid1.Columns[2].HeaderText = "C";
}
在模板中,控制列宽度是最容易的了.你可以把所有模板里面的控件均设置成100%,然后用datagrid中的列宽来控制宽度.
主要一个要点是,要设置列的页眉不换行(nowrap.)
列宽的设置主要用控件的"属性生成器"来进行,简单又方便.
下面一段设置后的例子.
<HeaderStyle Wrap="False" HorizontalAlign="Center" Width="40px"></HeaderStyle>
我这样不行:
dgFind.Columns(2).HeaderText=""sdfsdf"