我在WindowsForms中有一个DataGridView.我想要一个按钮将此DataGridView导出到Excel工作表. using Excel = Microsoft.Office.Interop.Excel; Excel.Application ExcelApp; Excel.Workbook ExcelWorkBook; Excel.Worksheet ExcelWorkSheet; ExcelApp = new Excel.Application(); ExcelWorkBook = ExcelApp.Workbooks.Add(Missing.Value); ExcelWorkSheet = (Excel.Worksheet)ExcelWorkBook.Worksheets.get_Item(1); try { for (int i = 0; i
以下是关于 datagridview 的编程技术问答
我在C#中做了一个DataGradView,它使我能够崩溃和扩展行. 看起来这样: 在启动时,我想折叠所有带有多个条目的客户.就像图片中所示的那样.如果customers is 10.000需要几分钟的时间. 折叠所有客户的代码: int number = 0; int oldnumber = 0; int parent = 0; foreach (CustomDataGridViewRow row in dataGridView1.Rows) { try { number = int.Parse(row.Cells[1].Value.ToString()); if (number != oldnumber && i
我知道数据纳布特存在性能问题,但是是否有任何方法可能更快?目前,dataAdapter.fill方法在3000个记录上需要5-6秒,这对我的应用程序来说太慢了.如果我删除Fill行并仅执行SQL(使用SQLCE),则需要20毫秒,所以我猜该查询不是问题所在.我已经尝试在数据表上添加BeginLoadData,但这对性能没有任何影响. using (SqlCeConnection con = new SqlCeConnection(conString)) { con.Open(); using (SqlCeDataAdapter dAdapter= new SqlCeDataAdapter()) { using (SqlCeCommand com = new SqlCeCommand(query, con)) { com.Parameters.Add("uname",
我正在使用BindingSource控制(我尝试将DoubleBuffered属性设置为true,RowHeadersWidthSizeMode disabled,AutoSizeColumnsMode无.但仍然相同的行为. 如何提高网格的性能? 解决方案 如果您有大量的行,例如10,000及以上, 为了避免性能泄漏 - 在数据绑定之前进行以下操作: dataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.EnableResizing; // or even better, use .DisableResizing. Most time consuming enum is DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders // set it to false if not needed dataGridVi
我实际上已经解决了这个问题,但是我正在为后代发布. 我遇到了我的双人监测系统上的datagridview的一个非常奇怪的问题.该问题表现为对控件的极慢(,对于完整重新粉刷的30秒),但仅当它在我的一个屏幕上时.另一方面,重新粉刷的速度很好. 我有一个NVIDIA 8800 GT,最新的非β驱动程序(175.东西).是驱动程序错误吗?由于我必须使用这种特殊的配置,因此我会把它放在空中. (不过,它不会在ATI卡上发生...) 油漆速度与单元素的内容无关,并且自定义图根本无法改善性能 - 即使只是绘画坚固的矩形. 我后来发现,将elementhost(从system.windows.forms.forms.integration namespace)放置在表单上可以纠正问题.它不必混乱;它只需要成为DataGridView所开启的形式的孩子即可.只要可见属性为真. 我不想将.NET 3/3.5依赖性添加到我的应用程序中;我是在运行时(如果可以的话)创建此控件的方法.
我有一个datagridview,我想将数据传递给ReportViewer,因此这样我可以轻松地打印和导出到PDF/Excel. 我该怎么做?还是有其他解决方案可以实现我的目标?谢谢你! :) 解决方案 由于您想将GridView数据传递给ReportViewer,因此您要做的第一件事是检索GridView的数据源,如下所示: BindingSource bs = (BindingSource)GridView1.DataSource;//You should first convert DataSourse into Binding Sourse DataTable dt = (DataTable) bs.DataSource; //Get GridView data source to Data table 现在,您在 DataTable DT 中获得了GridView数据,您可以将ReportViewer绑定到DataTable,如下所示: ReportVi
我需要能够从一个应用程序(使用普通复制命令)中复制一个名称或名称,然后能够双击DataGridView中的文本单元格以将数据粘贴到网格单元格中.关于如何实现这一目标的任何想法?我正在尝试最大程度地减少此功能的键盘使用. 解决方案 这实际上比您预期的要容易. 在您的datagridview中创建一个celldoubleclick事件,并在此处放置代码: private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = Clipboard.GetText(); } 其他解决方案 您应该将事件Handler连接到单元点事件上,并通过Clipboard.GetText()的数据替换单元格中的文本. 其他解决方案 我已经写了这篇文
我认为DataGridView是记忆猪.通过值datagridView或参考来通过值更好?甚至应该通过吗? 解决方案 通过值或参考将其传递给内存站点并不重要,因为DataGridView是参考类型,而不是值类型. 其他解决方案 类型DataGridView是一种参考类型,因此不可能按值传递对象.您可以按值将参考传递给对象,但这是一个很小的(通常是指针尺寸)的值. 其他解决方案 要添加到约瑟夫的答案中,所有通过值都通过它在调用方法堆栈帧中创建一个新变量,然后将datagridview对象的地址(在堆中)复制到该变量中用于使用称为方法.所有这些都是防止调用方法将新的DataGridView对象分配给 呼叫者中的变量 (调用方法),从而更改 DataGridView呼叫者将指向.
我有一个要在datagridview(DGV)中加载的选项卡划界文件;为此,我正在使用以下代码: DataTable dt = new DataTable(); using (FileStream stream = File.OpenRead("logs.txt")) { using (StreamReader reader = new StreamReader(stream)) { string line = reader.ReadLine(); while (line != null) { string[] items = line.Split('\t'); line = reader.ReadLine(); if (dt.Columns.Count == 0) { for (int
有人会协助我处理以下内容吗?我有两个datagridview对象,每个数据都显示一个数据表,其中两个数据表与以下代码相关: DataSet dSet = new DataSet(); DataTable ParentList = ListToDataTable(_listOfAllAlbumObjects); DataTable ChildList = ListToDataTable(_listOfAllTrackObjects); dSet.Tables.AddRange(new DataTable[]{ParentList, ChildList}); DataColumn parentRelationColumn = ParentList.Columns["AlbumId"]; DataColumn childRelationColumn = ChildList.Columns["AlbumId"]; dSet.Relations.Add("ParentToChild", pa
例如,在一个选项卡中,我有一个datagridview,该数据杂志被停靠了"填充".如果我将USERCORTROL的码头属性设置为"右"位置,则DataGridView会按预期移动.如果我用面板或标签替换USERCONTROL(也将停靠在TabPage中的"右"),那么DataGridView就不会空间.面板或标签仅覆盖DataGridView.我尝试了stackoverflow,并进行了一些阅读,但尚未看到任何规则(尚未).谢谢. 解决方案 他们的z订单.您可以将其前进并移至背景菜单项,右键单击控件以查看菜单. 使用View +(其他Windows) +文档轮廓窗口时,它会更加清晰,它将它们列在其容器下方的Z order中.并允许您拖动+放置控件以更改其顺序,您会立即在设计人员中看到效果.
我的原始方法是将我的datagridview包装在面板中,将其高度设置在面板边界之外,然后更改控制面板的滚动条位置.但是,我刚刚发现,我的DataGridView内部的行数将达到2000年,这迫使我至少将DataGridView尺寸缩小到: : 65px(行高)x 2,000 = 130,000px. 我的64位计算机上数据杂志控件的最大允许大小为65,535.有人可以想到解决这个问题的方法吗? 解决方案 嗯,不,您不能双向. 65535像素的尺寸限制不是人为的,这是操作系统中的硬烘烤限制.根本原因是 HIWORD指定滚动框的当前位置,如果Loword为SB_ThumbPosition或sb_thumbtrack HiWord是该值的上部16位,Loword是下部16位.只能提供0 .. POW(2,16)-1 = 0..65535.在其他地方可以看到此限制,如果您将其塞满超过(65535 +可见)项目,则列表框不当行为.您不能再滚动到底部. 听起来像
我正在使用Windows表单,并具有带有数据源的DataGridViewComboboxColumn的DataGridView. 当用户选择与组合框不同的项目时,我想立即更改行颜色以指示此新选择. 我已经测试了几个事件,例如CellValueChanged和RowPrepaint,但是这些事件要求用户在进行选择后单击行. 似乎该行没有立即更新.相反,它在用户单击行之后会更新. (即,这是大多数网格的工作方式,但我想更改此行为并立即提供反馈) 解决方案 您可以使用DataGridView的EditingControlShowing事件,并为ComboBox.SelectedIndexChanged事件添加事件处理程序: private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { Combo
我正在按照MSDN上的示例使用RowPrepaint事件来自定义我的行. 我只想自定义一些行,而不是全部.我也有一种交替的行样式. 当我踏上调试器时,我能够根据MSDN中的示例(一个微妙的梯度)观看该程序对行进行绘画,但是一旦rowprepaint Event Event Eventer Handler返回程序,请根据其默认样式重新粉刷了该行, . 如何保持自定义绘画风格? 解决方案 设置DataGridViewRowPrePaintEventArgs.Handled = true void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) { e.Handled =true; }
我正在尝试模仿其他所有表格视图对DataGridView控件的作用,但是我似乎无法使标头正确. 我想要一个空白的标题,所有标头的右侧都不会移动,实际上不是标题.有没有办法沿顶部绘制默认标头? 基本上,这是我的问题: 解决方案 尝试此 Dim dt As New DataTable() dt.Columns.Add("a") dt.Columns.Add("b") dt.Rows.Add(dt.NewRow()) dt.Rows.Add(dt.NewRow()) dt.Rows.Add(dt.NewRow()) dt.Rows.Add(dt.NewRow()) dt.Rows.Add(dt.NewRow()) dt.Rows.Add(dt.NewRow()) dt.Columns.Add(" ") dt.AcceptChanges() DataGridView1.DataSource = dt DataGridView1.AutoSize = True DataG
(对不起,英语不好) 我有一个大 DataGridView的性能. 我正在使用DataGridView从外部应用程序流中显示日志.来自流的消息以高频(小于1 ms)出现.如果我立即将新行添加到每条新消息时,DataGridView没有时间在下一条消息到来之前重新绘制自己. . 一个可能的解决方案是使用队列收集消息,并每100毫秒重新绘制DataGridView带有队列的消息.这很好,但是DataGridView自动滚动到最后一行时会闪烁. (禁用平滑滚动) 您能帮我改善DataGridView绩效吗? 解决方案 我最近有一些DataGridView>的缓慢问题,解决方案是以下代码 public static void DoubleBuffered(this DataGridView dgv, bool setting) { Type dgvType = dgv.GetType(); PropertyInfo pi = dgvType
我是C#编程中的新手,我正在开始创建一个应用程序,该应用程序显示(现实生活)"事件"通过进度键到期. 所有信息.关于这些事件,存储在数据库中;因此,打开与My-SQL数据库的连接,我可以检索所有事件. 问题是我不知道该数据库中存储了多少事件(因为一天我可以进行20个事件,而在另一个事件中,我可以拥有其他40个事件),而我的Form1无法根据事件的数量进行调整大小. . 因此,我需要制作一个页面系统,以限制每个页面中打印的事件. 在Google上以及在此站点上搜索,我看到在C#中制作页面的最简单方法是使用DataGridView,但我无法使用它,因为我需要进度键才能查看事件何时到期. 因此,我认为使用mySQL的限制数据选择来解决此问题:SELECT * from EVENTS LIMIT x,y;其中x和y是两个变量,并且它们会根据几个按钮更改;按钮1(第一页)x和y为0和20,在按钮2(第二页)x和y为20,40,依此类推. 但这是行不通的,因为x和y每次刷新form1时都会重置.
我有一个自定义对象的集合,其中t的格式列表列表,即自定义对象列表. 我需要将此集合绑定到Windows表单中的DataGridView控件,并且页数应等于外部列表中的内部列表数量.每个页面都应绑定到内部列表,即T的列表. 知道如何实现这一目标? 解决方案 假定您的嵌套列表已被填充,除了您的DataGridView外,您的表单还具有Previous>> and Next按钮用于更改页面:您可以使用按钮更改索引指示哪个嵌套列表应用作DataSource. public List> Pages { get; set; } // Populated elsewhere... public int PageIndex { get; set; } private void ChangePage() { this.PreviousButton.Enabled = this.PageIndex > 0; this.NextButton.Enabled