C# 将DataGridView中的单元格转换为组合框并返回:这是好代码吗?

C# 将DataGridView中的单元格转换为组合框并返回:这是好代码吗?,c#,datagridview,C#,Datagridview,在DataGridView中,我需要经常创建和销毁组合框。我担心有效的资源使用,可能的内存泄漏等。下面的玩具代码在点击按钮时在文本框或组合框之间来回转换单元格,位置选择在textBox1中。想象一下,有人整天按按钮来回转换盒子(或者另一种方法每秒执行几次)。这会导致大量内存使用或其他性能问题吗?我只是不确定DataGridView如何处理旧框,也不确定我是否正确地处理了旧东西。还是DGV会自动处理所有这些 编辑:显然,这并不是我们心目中的应用程序,而是一个玩具模型,其中包含用于说明问题的功能代码

在DataGridView中,我需要经常创建和销毁组合框。我担心有效的资源使用,可能的内存泄漏等。下面的玩具代码在点击按钮时在文本框或组合框之间来回转换单元格,位置选择在textBox1中。想象一下,有人整天按按钮来回转换盒子(或者另一种方法每秒执行几次)。这会导致大量内存使用或其他性能问题吗?我只是不确定DataGridView如何处理旧框,也不确定我是否正确地处理了旧东西。还是DGV会自动处理所有这些

编辑:显然,这并不是我们心目中的应用程序,而是一个玩具模型,其中包含用于说明问题的功能代码

这(100-200)行的大小大约是我要处理的dgv的大小

public partial class Form1 : Form
    {
        DataGridView dgv = new DataGridView();
        public Form1()
        {
            InitializeComponent();
            DataGridViewTextBoxColumn dgcol = new DataGridViewTextBoxColumn();
            this.Controls.Add(dgv);
            dgv.Dock = DockStyle.Right;
            dgv.Columns.Add(dgcol);
            dgv.Rows.Add(100);
        }
        private void button1_Click(object sender, EventArgs e) //make a box a combobox
        {
            int row = Int32.Parse(this.textBox1.Text);
            DataGridViewComboBoxCell newcombobox = new DataGridViewComboBoxCell();
            newcombobox.DataSource = new List<string> { "yellow", "green" };
            this.dgv[0, row].Dispose();
            this.dgv[0, row] = newcombobox;
        }
        private void button2_Click(object sender, EventArgs e)// make a box a textbox
        {
            int row = Int32.Parse(this.textBox1.Text);
            DataGridViewTextBoxCell newtextbox = new DataGridViewTextBoxCell();          
            this.dgv[0, row].Dispose();
            this.dgv[0, row] = newtextbox;
        }
    }
}
公共部分类表单1:表单
{
DataGridView dgv=新建DataGridView();
公共表格1()
{
初始化组件();
DataGridViewTextBoxColumn dgcol=新DataGridViewTextBoxColumn();
this.Controls.Add(dgv);
dgv.Dock=DockStyle.Right;
dgv.Columns.Add(dgcol);
dgv.Rows.Add(100);
}
私有无效按钮1\u单击(对象发送者,事件参数)//将框设为组合框
{
int row=Int32.Parse(this.textBox1.Text);
DataGridViewComboBoxCell newcombobox=新DataGridViewComboxCell();
newcombobox.DataSource=新列表{“黄色”、“绿色”};
this.dgv[0,行].Dispose();
this.dgv[0,row]=newcombobox;
}
私有无效按钮2\u单击(对象发送者,事件参数)//将框设为文本框
{
int row=Int32.Parse(this.textBox1.Text);
DataGridViewTextBoxCell newtextbox=新DataGridViewTextBoxCell();
this.dgv[0,行].Dispose();
this.dgv[0,row]=newtextbox;
}
}
}

“想象一下,有人整天按按钮,来回转换盒子。”…我可以很容易地想象,有人认为一定有更好的方法。你能提供一个更大的背景,说明你为什么要这样做,以及你为什么要这样做吗?我只是说,这似乎是一个笨拙的UI,我相信会有更好/更简单的方法来完成您正在尝试的操作。此外,我认为当代码执行这些行时…
this.dgv[0,row]=newcombobox
或…
this.dgv[0,row]=newtextbox…在此之前网格中的任何单元格都将被垃圾收集器收集。即使<代码>this.dgv[0,第行].Dispose()…释放的单元格对象将落入GC的突发奇想。显然,如果您多次这样做,GC必须做更多的工作。因此,从理论上讲,我猜这“可能”会造成很大的内存占用。@JohnG,这是玩具代码,只是为了说明这个问题。实际应用程序在数据网格视图中显示和编辑业务对象。当这些对象被创建、编辑、删除或移动时,需要改变并重新定义各种单元格的类型。嗯……那么,发布的代码并不代表实际代码,而是“玩具”代码?我不确定“玩具”代码是什么,但是从“玩具”代码的角度来回答您的问题…“这是好代码吗?”…它似乎可以工作,因此…我想说,一定要这样做。