当前位置: 首页 > 编程语言 > C#

查看包含-lot-列的表的最佳方式?Share

时间:2023-04-10 13:45:47 C#

查看包含*lot*列的表格的最佳方式?冒着被降级的风险,我想问一下,使用C#,从多列查看表中数据的最佳机制(对于此处固有的实践违规,最佳显然是主观的)。很多,我的意思是1000。现在,在您点击所有按钮之前,或者抛出诸如“为什么您有一个包含这么多列的表格”之类的答案之前,让我说这实际上是设计要求的一部分。我们正在从1000个数据点中尽快收集数据。我们需要尽快存储这些,因此需要平台。数据需要直接从SQLServer访问,因此是数据库(我们使用SQLCompactwithtable-direct)。所以,让我们暂时忘记我们所学的关于正确的数据库设计、规范化规则等的一切,只关注我有一个包含1000列的表这一事实,我希望能够显示数据屏幕验证数据是否确实进入了那里。我尝试了一个数据网格。它呕吐是因为(毫不奇怪)它不是为处理那么多列而设计的。我尝试在Studio中使用查看器。256之后就吐了,加上终端用户反正不会安装Studio。目前,结果不必很好,不需要可更新,也不需要对数据变化敏感——只是表中数据在给定时间点的静态快照.相关(或半相关)信息:如果您要实现自己的自定义用户控件,则可以像这样执行FisheyeGrid:Deadimagelink此示例显示了一个以9x10形式移动的全尺寸3x4面板。由于(我假设)您不需要编辑这些数据,UI可能只是让用户抓住面板并将其拖来拖去的东西。如果你真的很自虐和/或有很多空闲时间,你甚至可以在同一个网格上有多个鱼眼面板,让你可以同时比较网格的一个或多个区域。更新:显然,Silverlight有其中之一。有点儿。您可以将所有数字格式化为带空格的n字符字符串,然后以固定宽度的字体显示它们。12346364366346234636436634603463643663463446364366346333222334嗯,对我来说最合适的答案是使用ReportViewer控件,但不能t以MSDN中记录的任何方式使用它。问题是我有动态数据,所以我需要一个动态报告,而且所有教程等似乎都假定您在设计时就知道所有内容,因此您只需通过向导指向并单击即可。该解决方案最终需要几个部分。首先,我必须创建代码来动态生成ReportViewer用来描述报表布局以及哪些数据字段映射到什么的RDLC。这是我想出的:publicstaticStreamBuildRDLCStream(DataSetdata,stringname,stringreportXslPath){using(MemoryStreamschemaStream=newMemoryStream()){//将模式保存到流data.WriteXmlSchema(schemaStream);schemaStream.Seek(0,SeekOrigin.Begin);//将其加载到文档中并设置名称变量XmlDocumentxmlDomSchema=newXmlDocument();xmlDomSchema.Load(schemaStream);xmlDomSchema.DocumentElement.SetAttribute("名称",data.DataSetName);//加载报告的XSL文件(这就是魔法)XslCompiledTransformxform=newXslCompiledTransform();xform.Load(reportXslPath);//执行转换MemoryStreamrdlcStream=newMemoryStream();XmlWriterwriter=XmlWriter.Create(rdlcStream);xform.Transform(xmlDomSchema,作者);writer.Close();rdlcStream.Seek(0,SeekOrigin.Begin);//发回RDLCreturnrdlcStream;第二部分是我从DanShipe的博客XSL文件中得到的。那里的RDLC代码非常无用,因为它全部用于Web消费,但XSL是纯金的。为了完整起见,我把它放在了这篇文章的底部,以防博客离线。一旦我有了这两个部分,只需创建一个带有ReportViewer控件的表单,并使用以下代码对其进行设置:ds.DataSetName=name;Streamrdlc=RdlcEngine.BuildRDLCStream(ds,name,"c:\temp\rdlc\report.xsl");reportView.LocalReport.LoadReportDefinition(rdlc);reportView.LocalReport.DataSources.Clear();reportView.LocalReport.DataSources.Add(newReportDataSource(ds.DataSetName,ds.Tables[0]));reportView.RefreshReport();这里的关键是“ds”是一个DataSet对象,它包含一个包含要显示的数据的DataTable。此外,为了完整起见,这是XSL-对尺寸感到抱歉:8pt5007001in1in1in1in11in8.5in6.5inen-UStruetrue7358b654-3ca3-44a0-8677-efe0a55c7c450.50in0.5in0.50in0.25in0.25inSQL84635ff8-d177-4a25-9aa5-5a921652c79ctrueDummyDataSourceSystem.Int32System.StringSystem.DateTimeSystem.Boolean文本框true7Center2pt2pt2pt2pt#000000#ffffff#ffffffSolid=Fields!.Valuetrue7Left2pt2pt2pt#e0e0e0#000000#ffffffSolid0.75in如何将数据存储在csv文件中,这将为您提供查看选项。如果您的用户有Excel或OpenOfficeCalc,他们能否轻松导入数据(不确定Calc是否有列限制,但excel2007可以容纳16384列)并通过该程序查看?您需要在一张表中查看多行吗?我的猜测是这个数据是数字的,有没有什么办法可以将单行数据显示为20*50网格或类似的东西,然后只翻阅这些行?例如,第1行第1列=数据库的第1列,第2行第1列=数据库的第21列等。Id=11234567891011121314151617181920-----|--------------------------------------------------------0|20|40|60|80|100|120|等|尝试对html表格使用非常小的字体如果您担心格式化表格,请使用CSS:td{font-size:0.2em;文本对齐:右;或者,如果您所有的数字大小相同,您还可以生成一个“数字墙”显示,例如使用固定宽度的字体并将其显示在滚动面板中5个字符宽的列,具体取决于它需要多漂亮。如果这只是一个调试/点检查工具,您可以并排放置多个DataGrid,每个显示一个列选择。会有点丑陋,但可行。OTOH,如果您需要半抛光工具,您可能需要自定义控件来处理它。基本上,您将使用一些缓冲区来加载您正在查看的数据库部分,并且当用户滚动浏览当前加载的数据时,运行新的查询。DataGrid(甚至ListView)应该能够处理具有32列和32行的表,因此您可以一次显示整个数据库行的数据。这将使您能够立即查看某些单元格是否缺少数据。即使问这个问题我也觉得很脏,但你可以这样做:SELECTField1+'-'+Field2+...ASEvilMegaColumnFROMTable但实际上我认为这属于“如果你达到这个限制,你做错了什么“类别。我真的看不出有任何理由、速度或其他原因需要1000列……谁会阅读1000个列表???尝试找出一种方法来过滤或可视化数据。也许您应该研究不同类型的数据库。我听说面向列的数据库很适合这种事情(而典型的RDBMS是面向行的)。另外,如果您在第一次插入后不返回更新行,也许二进制平面文件比巨型表更好?我会把它作为一个深入的研究。在第一页(或页面顶部),您将拥有选择行的控件。在下一页(或页面底部),您将显示所选行的数据。根据所需的单元格宽度,您可以将此操作拆分为100行和10列,或1000行和1列。这可以作为动态客户端javascript轻松完成-您甚至可以通过这种方式使其可编辑。我不确定这在C#中是如何工作的。如果您只是进行验证,那么不能以编程方式检查每个字段并报告整行是正常的!然后您需要一个非常简单的数据网格,列出不太好的行。然后可以通过可应用于单行的任何技术来检查它们,因为在大多数情况下您不需要浏览字段。我在这里假设您可以以某种方式查看整行,并正在寻找同时遍历多行以查找丢失数据的方法(自动化会使它更健壮)。从一个倾斜的角度来看,我会问用户是否需要一次“加载”所有列?如果用户愿意一次显示一列子列(例如,一次显示100列,或一次显示一个特定的列),那么我会使用某种数据网格(内置的或一个ListView,或者可能是第3方)来显示子集,CheckedListView停靠在一侧,允许显示感兴趣的子集。或者,您能否显示某种汇总数据,显示100列组的计数/平均值/xxx?我建议研究地板布局以外的东西。根据我的经验,数据库对列数和行大小(以字节为单位)有限制。每个数据库实现都有一个页面大小(4k/8k),并且单行必须适合这个数据大小。NULL通常是免费赠品。这意味着1000x4字节的1000英寸将适合4k页面大小。如果您使用varchars谈论数据,问题会更糟。每列有多少个字符?可以填充多少列?如果平均有10个字符,页面大小为8k,那么您将因SQL错误而丢失数据。如果必须的话,请大笑,但这确实发生在平面数据表中一个特别长的曲折打字员身上,我知道这是在挑战极限。..验证数据确实存在。可能它已经过时了,但您可以使用像素图,其中单个像素代表表格的单个单元格(对于大于1000的屏幕)或单个像素代表10个单元格,单击缩放区域。像素的颜色将取决于数据。对于空/数据,它可以是黑色/白色。或者它可能是颜色显示每行增加或减少的值。或红色表示数据突然跳跃。您通常可以在数据网格中捕获所有异常。那么您需要的是捕获感兴趣区域中点击的坐标,并使用一个小表格来显示表格的一部分,而无需任何滚动。单击一下返回到像素图。鉴于用户无论如何都必须水平滚动,您可以使用显示合理数量的列(比如50)的常规数据网格。然后,您在网格下方有一个水平滚动条,用于选择要显示的列子集。当滚动条在左侧时,您将看到第1-50列,当您单击向右箭头时,您将转到第2-51列,等等。这为您提供了滚动功能,而不会使网格控件因数据而过载。虽然您将失去在表格中使用自由光标或进行大矩形选择的能力,但这听起来不像是此应用程序的问题。有多少数据对初始视图至关重要?我可以看到做一些像主/细节类型的网格,你把关键列(比如10)放到数据网格上,当用户点击查看细节时,你可以获取剩余的列并将它们显示在“属性区”或类似的地方事情。如果您需要做的只是确保数据已填充,为什么不让每一列都有一个默认值,例如“void”、“blank”等。然后您可以迭代计数非默认值/总数以显示百分比。您现在可以使用百分比值可视化数据完整性,甚至记录哪些列具有默认值(如列表/数组)以供进一步调查。您可能会考虑检查您的用户群并了解他们真正需要看到的内容,然后为每个不同的需求设置视图,这样您的列就会更少。另一种选择是读取数据,并从中创建一组高大的静态html页面。然后您可以从您的程序中调用浏览器来查看它。有一个可滚动的窗格并一次显示10列(这些列可以主动加载或缓存,或者任何你需要的)。向左滚动时,会显示前十名。向右滚动时,将显示以下列序列。总而言之,在任何给定点只有10列处于活动状态。在我看来,尝试实际显示1000列将是任何其他方式。PS:这只是一个理想的猜测;我不确定这是否可行。这就是C#学习教程:查看包含*lot*列的表的最佳方式?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: