Winforms Windows窗体自定义DataGridView

Winforms Windows窗体自定义DataGridView,winforms,datagridview,Winforms,Datagridview,我对Windows窗体不是很有经验,也不确定如何以最好的方式完成这项任务。我有一个类似这样的类: public class VariableMapping { private string variableName; private string variableText; private string variableSelector; public VariableMapping(string variableName, string variableTex

我对Windows窗体不是很有经验,也不确定如何以最好的方式完成这项任务。我有一个类似这样的类:

public class VariableMapping
{
    private string variableName;
    private string variableText;
    private string variableSelector;

    public VariableMapping(string variableName, string variableText, string variableSelector)
    {
        this.VariableName = variableName;
        this.VariableText = variableText;
        this.VariableSelector = variableSelector;
    }

    public string VariableName
    {
        get { return this.variableName; }
        set { this.variableName = value; }
    }

    public string VariableText
    {
        get { return this.variableText; }
        set { this.variableText = value; }
    }

    public string VariableSelector
    {
        get { return this.variableSelector; }
        set { this.variableSelector = value; }
    }
}
我想创建一个DataGridView,它应该绑定到列表中VariableMapping类型的许多元素。但是,我只希望在DataGridView中显示每个实例的1个属性(VariableText),但我希望能够在需要时通过DataGrid处理整个对象。我还需要添加另外两个自定义列:一个带有预定义值的组合框和一个数字框

这似乎是一项非常简单的任务,但我在WinForms方面毫无经验,也找不到一个可以使用的解决方案。谢谢大家!

编辑:我正在尝试类似的方法,但似乎无法正常工作:

public partial class MappingTable : Form
{
    private DataGridView dataGridView1 = new DataGridView();

    public MappingTable(List<VariableMapping> variableMappings)
    {
        InitializeComponent();

        var colors = new List<string>() { "@color_k1", "@color_k2", "@color_s1" };

        dataGridView1.AutoGenerateColumns = false;
        dataGridView1.AutoSize = true;
        dataGridView1.DataSource = variableMappings;

        DataGridViewColumn titleColumn = new DataGridViewColumn();
        titleColumn.DataPropertyName = "VariableText";
        titleColumn.HeaderText = "Variable";
        titleColumn.Name = "Variable*";

        dataGridView1.Columns.Add(titleColumn);

        DataGridViewComboBoxColumn colorsColumn = new DataGridViewComboBoxColumn();
        colorsColumn.DataSource = colors;
        colorsColumn.HeaderText = "Color";

        dataGridView1.Columns.Add(colorsColumn);

        DataGridViewTextBoxColumn opacityColumn = new DataGridViewTextBoxColumn();
        opacityColumn.HeaderText = "Opacity";

        dataGridView1.Columns.Add(opacityColumn);

        this.Controls.Add(dataGridView1);
        this.AutoSize = true;
    }
}
公共部分类映射表:表单
{
私有DataGridView dataGridView1=新DataGridView();
公共映射表(列表变量映射)
{
初始化组件();
var colors=new List(){“@color_k1”,“@color_k2”,“@color_s1”};
dataGridView1.AutoGenerateColumns=false;
dataGridView1.AutoSize=true;
dataGridView1.DataSource=variableMappings;
DataGridViewColumn titleColumn=新DataGridViewColumn();
titleColumn.DataPropertyName=“VariableText”;
titleColumn.HeaderText=“变量”;
titleColumn.Name=“Variable*”;
dataGridView1.Columns.Add(titleColumn);
DataGridViewComboBoxColumn colorsColumn=新DataGridViewComboxColumn();
colorsColumn.DataSource=颜色;
colorsColumn.HeaderText=“Color”;
dataGridView1.Columns.Add(colorsColumn);
DataGridViewTextBoxColumn opacityColumn=新DataGridViewTextBoxColumn();
opacityColumn.HeaderText=“不透明度”;
dataGridView1.Columns.Add(opacityColumn);
this.Controls.Add(dataGridView1);
this.AutoSize=true;
}
}

如果使用代码设置
DataGridView
DataSource
,则可以将
AutoGenerateColumns
设置为false,只需使用
DataGridView.columns.add添加所需的列即可。如果您使用的是
Designer
,则可以使用
Columns
集合来管理所需的列。@RezaAghaei我通过粘贴当前尝试使用的代码编辑了这篇文章。你能指出我遗漏了什么吗?它似乎不能正常工作,这不是一个合适的问题描述。据我所见,它添加了您需要的列。具体问题是什么?主题外,但是
DataGridViewColumn
应该是
DataGridViewTextBoxColumn
。如果您正在使用代码设置
DataGridView
数据源
,您可以将
AutoGenerateColumns
设置为false,只需添加您想要使用
DataGridView.columns.add
。如果您使用的是
Designer
,则可以使用
Columns
集合来管理所需的列。@RezaAghaei我通过粘贴当前尝试使用的代码编辑了这篇文章。你能指出我遗漏了什么吗?它似乎不能正常工作,这不是一个合适的问题描述。据我所见,它添加了您需要的列。到底是什么问题?脱离主题,但是
DataGridViewColumn
应该是
DataGridViewTextBoxColumn