首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataGridView CellTemplate设置不能正常工作

DataGridView CellTemplate设置不能正常工作
EN

Stack Overflow用户
提问于 2012-08-21 03:30:16
回答 1查看 2.3K关注 0票数 1

我花了几个小时为动态创建的列创建模板。以下是代码(它不是来自我的主项目,但我简化了代码以重现我的问题):

首先,我创建了一个包含列设置的类:

代码语言:javascript
复制
public class ColumnBLO
{
    public string foreColor { get; set; }
    public string backColor { get; set; }
    public string Label { get; set; }
}

下面是我的主窗口的代码:

代码语言:javascript
复制
        private Dictionary<string, DataGridView> dgViews;
    private List<ColumnBLO> columns;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        tabControl1.TabPages.Clear();
        tabControl1.TabPages.Add(new TabPage("laUNe"));

        //Simulating Format settings
        columns = new List<ColumnBLO>();
        columns.Add(new ColumnBLO { backColor = "Black", foreColor = "Black", Label = "one" });
        columns.Add(new ColumnBLO { backColor = "Blue", foreColor = "Blue", Label = "two" });
        columns.Add(new ColumnBLO { backColor = "Red", foreColor = "Red", Label = "three" });

        //Creating datagridviews and populate with data
        dgViews = new Dictionary<string, DataGridView>();
        DataGridView dgv = new DataGridView();

        DataTable dt = new DataTable("laTable");
        dt.Columns.Add("one");
        dt.Columns.Add("two");
        dt.Columns.Add("three");
        dt.Rows.Add("un", "deux", "trois");
        dt.Rows.Add("un", "dos", "tres");
        dt.Rows.Add("uno", "due", "tre");
        dgv.DataSource = dt;

        dgViews.Add("one", dgv);

        tabControl1.TabPages[0].Controls.Add(dgv);

        //Formatting
        foreach (DataGridViewColumn dgvcol in dgViews["one"].Columns)
        {
            ColumnBLO colB = columns.Where(x => x.Label == dgvcol.HeaderText).First();
            DataGridViewCell dgvc = new DataGridViewTextBoxCell();
            dgvc.Style.BackColor = Color.FromName(colB.backColor);
            dgvc.Style.ForeColor = Color.FromName(colB.foreColor);
            dgvcol.CellTemplate = dgvc;
        }

    }
}

当我执行这段代码时,不会显示格式,因为我单击了一个标题列(对该列进行排序),或者如果我调用了sort方法。

我在DGV上尝试了很多东西,比如刷新(),失效()和InvalidateColumns(),但都不起作用……

如果有人能帮我的话;-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-21 04:49:01

将您的foreach循环替换为以下内容...

代码语言:javascript
复制
...

//Formatting
foreach(DataGridViewColumn dgvcol in dgViews["one"].Columns)
{
     ColumnBLO colB = columns.First(x => x.Label == dgvcol.HeaderText);
     dgvcol.DefaultCellStyle.BackColor = Color.FromName(colB.BackColor);
     dgvcol.DefaultCellStyle.ForeColor = Color.FromName(colB.ForeColor);
}

...

如果你使用的是DefaultCellStyle而不是CellStyle单元格,那么默认情况下你的模板会呈现这些单元格...灵魂喜欢明显的船长))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12043888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档