【问题标题】:Saving unbound column in datagridview to a datatable将datagridview中的未绑定列保存到数据表
【发布时间】:2020-12-27 15:01:11
【问题描述】:

您好,我没有太多编程经验,也没有找到任何关于我的问题的有用信息,所以我需要您的帮助。

我的目标是创建一个由本地数据库(数据表)数据绑定的数据网格视图,用户可以完全自定义。起初,当用户登录主窗体时,如果没有之前的编辑实例,datagridview 将不显示任何内容,但是用户可以通过按钮添加列(指定 headertext,datatype 等),添加后 datagridview 将显示第一列,然后用户只需单击 datagridview 方块(如 MS excel)即可编辑行。之后,用户可以通过点击保存按钮来保存数据,现在数据表会显示保存的数据,下次用户登录时,它会显示保存的内容。

现在的情况:我在数据表中有 3 列数据,它是数据绑定到 datagridview 的,在调试时它会显示它应该是怎样的,我创建了未绑定的列,但它当然不会在按下后保存保存按钮,那是因为我对这段代码有问题:

        private void button3_Click(object sender, EventArgs e) // save button
        {
            for (int j = 0; j < dataGridView1.ColumnCount; j++)
                for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                {
                    cmd = new SqlCommand(@"INSERT INTO Inventorius VALUES ('" + 
                         dataGridView1.Rows[i].Cells[j].Value + "')");
                    con.Open();
                    cmd.ExecuteNonQuery();
                    con.Close();
            }
         }

我正在尝试找到一种特定的算法,该算法可以将所有行和列插入到在 datagridview 中创建/删除的数据表中。

我认为我还应该查看添加列的函数,还是无关紧要?啊,请告诉我这个目标是否适合用 datagridview 做,或者有没有更好的选择,谢谢。

【问题讨论】:

    标签: c# datagridview


    【解决方案1】:

    我认为你的做法是错误的

    我了解您希望为用户提供创建列的能力,但只有一定数量的列,它们是哪些列由数据库设计决定。你不能让用户随意添加他们自己的列(嗯..你可以,但这似乎不是你的目标)

    因为有一组已知的列,您不妨全部支持,将它们全部绑定,将它们全部放在您的 datagridview 中,然后让它们全部不可见 (theColumn.Visible = false) 并且当用户选择“添加“他们,让他们Visible=true。它们“看起来”像是被添加的,但实际上它们一直都在那里,连接起来并正常工作,只是隐藏起来


    我也认为你正在处理你的数据网格/表格/访问错误的方式(或者,艰难的方式)

    • 向您的项目添加新数据集

    • 打开它,右键表面,添加一个tableadapter

    • 通过向导,选择一个连接字符串,保存它,添加一个返回行的选择,select * from sometable where id = @id,调用方法 FillBId/GetDataById,完成

    • 保存数据集

    • 切换到您的表单,打开“数据源”窗口(查看菜单,其他窗口),将代表您的数据表的节点拖到表单上 - 出现一个 datagridview 以及其他一些将检索和保存数据、管理当前行的组件等等

    • 在InitializeComponent()之后在构造函数中加入一些代码:

      foreach(DataGridViewColumn c in yourDataGridViewName.Columns) c.Visible = false;

    • 以某种方式为用户选择列,也许是一个带有复选框的列表框,从 datagridview 列集合中获取其项目列表

    • 注意后端代码的结构 - 当您将网格放在表单上时,它也会编写一些代码;这也是加载(填充)和保存(tableadapter.update)数据库的方法

    不要遍历从其中提取值的 datagridview;它是一个 UI 控件,用于显示和编辑它所绑定的数据表。如果要访问值,请通过数据表获取。如果要保存编辑过的alue,只需要一行代码:someTableAdapter.Update(someDataTableNameHere)

    【讨论】:

    • 非常感谢!我没有想到更新可见性的原则,你解决了我很多宝贵的时间,我一直认为不定列是合乎逻辑的选择,我真的在搜索并做错事!再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    相关资源
    最近更新 更多