首页 文章

在datagridview和表单之间传递数据的更有效方法

提问于
浏览
3

我有一个程序,有许多“创建新的[xxx]”表单(包含文本框,组合框,日期时间picekrs等),稍后会保存到数据库中 . 要查看该数据,我使用相应的表单“view [xxx]”,其中包含从数据库填充的datagridview .

当用户单击datagridview中的字段时,应该将数据发送回原始的“创建”表单 .

到目前为止,我一直在通过从datagridview传递整行的数据来重载“create”表单的构造函数:

例:

查看表格:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex > -1)
        {
            ID = dataGridView1.Rows[e.RowIndex].Cells[0].FormattedValue.ToString();
            string posName = dataGridView1.Rows[e.RowIndex].Cells[1].FormattedValue.ToString();
            string posDesc = dataGridView1.Rows[e.RowIndex].Cells[2].FormattedValue.ToString();

            frmNewStaffPosition frm = new frmNewStaffPosition(posName, posDesc);

            frm.Show();
frm.NewTypePositionAdded += new frmNewStaffPosition.AddNewTypeOfStaffPosition(frm_NewTypePositionAdded);

创建表格:

public frmNewStaffPosition( string pos, string desc)
    {
        InitializeComponent();
        tbPositionName.Text = pos;
        tbNewStaffPositionDecription.Text = desc;



    }

虽然这有效,但我认为它不是最好的解决方案,特别是如果从VIEW传递的数据包含许多列 . 是否有更优雅的解决方案,即只传递选定行的PK并直接从数据库填充CREATE表单?

如果那很重要我通过MySQL连接器使用MySQL数据库 .

3 回答

  • 0

    取决于什么是负责人 . 传递密钥是一种方法,但是你必须将数据库代码添加到表单中 . 结果是混乱的耦合明智,并且看到你正在使用FormattedValue,你必须重新实现它 .

    你可以打开一个类来放入数据并将其传入,然后将所有内容委托给类,或者更好地委托它实现的接口 .

    或者你可以保持原样,看到所有这些正在移动/隐藏你现在拥有的凌乱的一点 .

    如果事实证明你的几个表格正在使用常见的数据分组,那么可能值得一看,如果没有,不要以为我会打扰自己 .

    也就是说,从网格底层的数据源(即数据行)传递,我会更加舒服,否则对于任何非字符串值,您将要转换/解析为非,除非表单仅将数据作为字符串处理 .

  • 0

    如果你的列少于几百,只要你的列不是具有几MB数据的BLOB,我猜这不是你程序的性能障碍 . 如果你传递了几百(或几千)行,那么这将是一个完全不同的问题,但是即使你有200个左右的列传递计算机的大量数据也没什么,它可以做很多次,很多次你无法注意到的时间空间 .

    不要过早优化 . 你的程序运行速度慢吗?如果不是,请不要打扰,你已经完成了 . 如果是,请使用分析器查看所需的时间超过应有的时间并查看优化情况 .

    哦,如果你有一两个以上的列,最好是为每个列创建一个包含字段的类,填充该类的实例,然后传递它 . 处理比很多很多参数要容易得多 .

  • 0

    通常我会遵循这些基本规则......

    1)如果您正在查找/编辑特定记录数据,请仅将密钥数据传递给构造函数到下一个表单 .

    2)如果要使用默认值创建新数据,请将它们放到类中 .

相关问题