征集.net区datagrid模板列固定列宽度最佳解决方案!有人知道的话就发一下吧!
可以帮助更多的人up可以,但是拒绝发一些与标题无关的代码!

解决方案 »

  1.   

    http://dotnet.aspx.cc/ShowDetail.aspx?id=A27CA611-2DE7-432D-8DBC-1512CEFDAA53
      

  2.   

    .net区真是一群笨蛋!两天了就一个抢分的人发了一个无法访问的贴!我还是自己搞吧!
      

  3.   

    style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all"
    在DataGrid属性里面加入这个试试
      

  4.   

    为 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";
    }
      

  5.   

    楼主的态度请端正一点.别人帮你,即使不成功也请多点风度.
    在模板中,控制列宽度是最容易的了.你可以把所有模板里面的控件均设置成100%,然后用datagrid中的列宽来控制宽度.
    主要一个要点是,要设置列的页眉不换行(nowrap.)
    列宽的设置主要用控件的"属性生成器"来进行,简单又方便.
    下面一段设置后的例子.
    <HeaderStyle Wrap="False" HorizontalAlign="Center" Width="40px"></HeaderStyle>
      

  6.   

    我这样设置了,还是有换行,还有怎么样设置标头文本,而不用SQL语句的AS 啊?
    我这样不行:
      dgFind.Columns(2).HeaderText=""sdfsdf"