Tag: datagridview

以编程方式将行添加到数据绑定的DataGridView中?

我有一个问题,我似乎无法解决它。 我以为有人在这里可以提供帮助。 我有一个具有客户DataGridView的表单。 现在,我想向这个DataGridView添加几个客户,而不是实际将它们添加到数据库中。 这是因为客户端必须能够创建客户端列表,并在完成后立即添加所有客户端。 我试过这个: string[] array = {“Microsoft”, “Redmond”, “Something”} dataGridView.Rows.Add (array); 现在这不能完成,因为我得到一个exception,说你的行不能以编程方式将行添加到数据绑定的DataGridView 。 现在我还读到这可以通过使用表适配器插入行而不是直接添加它来解决。 一个DGV。 但这也是不可能的,因为我在DGV中使用自定义标头,因为现有数据是通过JOIN获取的,所以如果我通过TableAdapter添加它,我会得到一个与数据库表模式不匹配的exception。 现在我真的迷路了……任何人都知道这个问题的一个(中途)优雅的解决方案? 谢谢

为什么Visual Studio会自动更改表单的布局?

我有一个Windows表单,其中包含3个文件: AbcFrm.cs AbcFrm.Designer.cs AbcFrm.resx 每当我对datagridview的任何属性进行一些更改或添加新事件时,控件的大小会向右侧和底部变大,并导致某些控件超出范围。 我在执行次要属性更改之前和之后比较了.Designer.cs文件(例如,将datagridview的tabStop属性值从true更改为false),并发现在.Designer.cs文件中自动添加/更改了一些行/属性: 一些控件’ .Size值的变化 一些控件’ .Location值的变化 一些控件’ .Padding值的变化 表单的.AutoScaleDimensions变得更大 表单的.ClientSize变得更大 编辑 我意识到当我将分辨率从150%更改为125%并重新打开应用程序时,控件又回到了正确的位置,因为窗体现在具有更大的缩放尺寸。 我的问题与这个问题类似 原因是代码可能已在具有不同分辨率的计算机中编辑。 然而,解决方案并不令人满意,因为它不能解决问题,只能找出原因。 我该如何防止这种情况发生? 我正在使用Visual Studio 2010,我的操作系统是Windows 10。

DataGridView只读单元格

我有一个包含大量数据的绑定DataGridView。 问题是某些单元格必须是ReadOnly,当用户在单元格之间使用TAB或ENTER导航时,应绕过ReadOnly单元格。 在装载后,制作某些特定细胞的最佳方法是什么? 在设置DataSource之后循环遍历单元并不是一个好主意,考虑到网格有大量数据。 此外,在CellEnter上创建单元格ReadOnly不起作用,因为当使用TAB键导航时,我必须已经知道下一个单元格是否为ReadOnly。

我需要一个BindingSource和一个用于WinForms DataBinding的BindingList吗?

我想在Windows窗体应用程序中显示DataGridView中的人员列表。 我希望我的服务层返回Person对象列表(例如, IList )。 我希望列表中的更改能够反映在DataGridView ,反之亦然。 我的理解是使用BindingSource有助于使用DataGridView 。 我的问题是双向数据绑定工作,我需要: //pseudo code BindingSource.DataSource = IBindingList 或者我可以这样做: BindingSource.DataSource = IList 有什么不同? 如果我对列表进行了更改,那么DataGridView会以哪种方式更新? 如果我必须使用BindingList ,从我的服务层返回一个BindingList似乎有点不可思议(因为创建一个依赖),有没有办法解决这个问题? 微软谈到BindingList (在备注部分) http://msdn.microsoft.com/en-us/library/ms132679.aspx : “但是,典型的解决方案程序员将使用提供数据绑定function的类,例如BindingSource ,而不是直接使用BindingList 。”

需要一个非常定制的大型Winforms网格

我即将开发一个Windows PC应用程序(它可以是WinForms或WPF),我主要担心的是我必须解决的UI问题。 基本上,我需要有一个大约50×50的网格,我需要从用户那里获得输入。 这是2500场。 实际上大多数将留空,大约10%将由用户填写。 每个字段可以是空白的,也可以是1到4的数字。我想要简单的输入 – 也许是一个下拉框(因为用键盘键入所有2500个字段没有意义,我希望用户填写使用鼠标的值)。 我在考虑下拉框或者甚至是标签,当你点击它们时会改变价值,但问题是(从我做过的测试中)添加2500种任何类型的控件会使界面非常慢。 我尝试在winForms应用程序中使用tablelayoutpanel,使用suspend / resumeupdate函数,还有doublebuffering,这有点帮助,但它仍然非常慢。 我不愿意去DataGridView路由,因为我需要非常自定义标头,我需要UI来自动更新一些百分比,因为用户更改了字段中的值。 但如果这是我唯一的选择,我不会反对。 我听说WPF可能会更好,因为你可以有很多控件,而且每个控件都没有自己的窗口处理,而且还有虚拟化(不确定实现有多难)。 我愿意接受建议。 我知道有人会建议打破网格,我最终可能会这样做。 无论哪种方式,我想知道在Windows应用程序中使用许多控件的大型网格的最有效方法,就像我要在不破坏网格的情况下开发它一样。 我正在使用VS 2013,在C#,.NET 4.0中开发。 谢谢!

如何从DataGridView构建DataTable?

我可能会向后看这个问题,但我很好奇。 有没有办法从DataGridView当前显示的内容构建DataTable ? 要清楚,我知道你可以做这个DataTable data = (DataTable)(dgvMyMembers.DataSource); 但是它包括隐藏的列。 我想仅从显示的列构建它。 希望有道理。 所以我最终尝试了几个答案的组合,因为这似乎是最好的。 以下是我的尝试。 基本上我是从DataSource创建DataTable,然后根据列是否可见来向后工作。 但是,在删除列后,我得到一个Collection was modified; enumeration operation may not execute Collection was modified; enumeration operation may not execute在foreach的下一次迭代中Collection was modified; enumeration operation may not execute 。 我很困惑,因为我没有尝试修改DataGridView ,只有DataTable这样做了什么? DataTable data = GetDataTableFromDGV(dgvMyMembers); private DataTable GetDataTableFromDGV(DataGridView dgv) { var dt = ((DataTable)dgv.DataSource).Copy(); foreach (DataGridViewColumn column […]

在datagridview列中替换true / false

我有一个datagridview,我填写如下: var q= repository.GetStudents();// dataGridView1.DataSource = null; dataGridView1.Columns.Clear(); dataGridView1.DataSource = q; dataGridView1.Columns.RemoveAt(1); //Remove IsActive //Cause I want to have my own implementation dataGridView1.Columns[0].DataPropertyName = “StudentID”; dataGridView1.Columns[0].HeaderText = “Studunet ID”; dataGridView1.Columns[1].DataPropertyName = “IsActive”; dataGridView1.Columns[1].HeaderText = “Status”; “IsActive”属性是布尔类型。 当显示“IsActive”单元格时,它显示true / false。 我想用我自己的自定义值替换它。 我读了这个post,但我无法解决我的问题。

以编程方式删除数据网格视图中的行标题

我有一个datagrid视图,我想删除所有行的行标题… 我试图删除圆形部分,如下图所示(行标题) 为此,我已经编写了下面的代码……但它并没有开始…… private void dgvProducts_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) { e.PaintCells(e.ClipBounds, DataGridViewPaintParts.All); e.PaintHeader(DataGridViewPaintParts.All | DataGridViewPaintParts.Border | DataGridViewPaintParts.None | DataGridViewPaintParts.SelectionBackground | DataGridViewPaintParts.ContentBackground); e.Handled = true; } 任何请给出任何示例代码删除数据网格视图中的行标题….. 提前谢谢了…..

数据网格视图和tabcontrol C#的奇怪问题

我有一个奇怪的问题。 我有一个带有两个TabPages的TabControl 。 每个页面都有一个datagridview 。 两个datagridviews都填充了XML文件。 我想将AutoSizeColumnsMode设置为“ Fill ”两个DataGridViews 。 我想在我的代码中设置列的宽度。 对于TabPage1 ,一切正常,但TabPage2上的DataGridView设置宽度会抛出NullReferenceException 。 我真的没有得到它,因为我做了与datagridview1相同的事情,并且工作正常,但datagridview2抛出exception。 此外,如果我选择任何AutoSizeColumnsMode值但是Fill ,则没有例外。 这是代码: XmlReader xmlFile = XmlReader.Create(“File1.xml”, new XmlReaderSettings()); DataSet ds = new DataSet(); ds.ReadXml(xmlFile); dataGridView1.DataSource = ds.Tables[0]; dataGridView1.Sort(dataGridView1.Columns[1], ListSortDirection.Ascending); dataGridView1.Columns[0].Width = 35; dataGridView1.Columns[1].Width = 248; dataGridView1.Columns[2].Width = 110; dataGridView1.Columns[3].Width = 140; dataGridView1.Columns[9].Width = 127; dataGridView1.Columns[0].Visible = false; dataGridView1.Columns[1].Visible = […]

如何按2列对datagridview进行排序

如何按两列(升序)对DataGridView进行排序? 我有两列: day和status 。 如果我需要按一列排序,我会: this.dataGridView1.Sort (this.dataGridView1.Columns[“day”], ListSortDirection.Ascending); 但对于两个?