【问题标题】:ScrollBars of DataGridview will be Crash when the height of all rows exceed the vision height of DataGridview当所有行的高度超过 DataGridview 的视觉高度时,DataGridview 的 ScrollBars 会 Crash
【发布时间】:2010-10-27 11:40:58
【问题描述】:

正如标题所说,

DataGridview.ScrollBars = 垂直;

假设DataGridview的视觉可以包含4行,如果行到6,它就有一个Vertical ScrollBar。但是如果点击滚动条,程序就会崩溃。 如果我们设置DataGridview.ScrollBars = None,就不会出现问题。

public partial class visitorLeave : Form
{
    public visitorLeave()
    {
        InitializeComponent();
    }
    bool isWorkerStopped = false;
    bool clickstart = false;
    ManageEmployee me = null;

    Thread tr1;

    private void visitorLeave_Load(object sender, EventArgs e)
    {
        me = new ManageEmployee(10);
        dataGridView1.AutoGenerateColumns = false;
        dataGridView1.DataSource = me.DataSource;
        tr1 = new Thread(new ThreadStart(Add));
        tr1.IsBackground = true;
        tr1.Start();
    }

    void Add()
    {
        while (!isWorkerStopped)
        {
            if (clickstart)
            {
                me.AddEmployee(new EmployeeData("new" + DateTime.Now.Ticks.ToString(), "0", "0", "0", "0", "0", null));
                dataGridView1.DataSource = me.DataSource;
                dataGridView1.UpdateRowHeightInfo(0, true);
                clickstart = false;
            }
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        clickstart = !clickstart;
    }
}

【问题讨论】:

    标签: c# .net datagridview crash scrollbars


    【解决方案1】:

    这是 Windows 窗体调试逻辑中的漏洞之一,它试图检测您以线程不安全的方式使用控件。它看不到您在 UI 线程以外的线程中分配 DataSource 属性。

    使用 BackgroundWorker 来实现您的线程逻辑。并使用其 RunworkerCompleted 事件处理程序来设置网格的 DataSource 属性。如果您希望保留现有的线程代码,或者使用 Control.Invoke。

    【讨论】:

    • 但是我还有一个问题:我想要一个程序(或线程)向数据源添加数据,而MainProgram更新datagridview。我怎样才能做到?
    • 使用线程将数据添加到例如 List 是没有问题的。但是将它绑定到网格必须发生在主线程上。这不是问题,检索数据是昂贵的部分,绑定不是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2011-12-23
    • 2018-04-07
    • 1970-01-01
    相关资源
    最近更新 更多