Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于创建发票的UI_C#_User Interface_Controls_Custom Controls_Data Visualization - Fatal编程技术网

C# 用于创建发票的UI

C# 用于创建发票的UI,c#,user-interface,controls,custom-controls,data-visualization,C#,User Interface,Controls,Custom Controls,Data Visualization,目前,我正在制作一个定制的发票解决方案。我为客户创建了多种方法来创建他们的模板(HTML、Word、LaTex),并根据他们的模板获取发票。但是,这些发票是由第三方手动生成的 因此,过程是: 请求创建新发票 将创建初步发票 用户有机会进行更改(即添加、删除、更改行) 创建pdf 需要明确的是,初步发票不需要按照模板的格式进行格式化,但您应该能够添加/删除/更改行,并且对于每个单元格,指示该值是否应在最终结果中可见 我的问题是我找不到合适的方式来显示初步发票。我尝试了一个datagrid(默认

目前,我正在制作一个定制的发票解决方案。我为客户创建了多种方法来创建他们的模板(HTML、Word、LaTex),并根据他们的模板获取发票。但是,这些发票是由第三方手动生成的

因此,过程是:

  • 请求创建新发票
  • 将创建初步发票
  • 用户有机会进行更改(即添加、删除、更改行)
  • 创建pdf
需要明确的是,初步发票不需要按照模板的格式进行格式化,但您应该能够添加/删除/更改行,并且对于每个单元格,指示该值是否应在最终结果中可见

我的问题是我找不到合适的方式来显示初步发票。我尝试了一个datagrid(默认、telerik、DevXpress),但它太乱了。除了数据网格,我不知道我能用什么


我可以最好地使用哪些控件来创建一个漂亮且可用的UI。

您的平台是什么?Winforms?WPF

你到底不喜欢使用datagrid做这件事吗?问题的一部分在于,不管你喜欢与否,你都将要编写一个数据网格——你基本上描述了一个数据网格的特性。如果可能的话,试着使用其他人的datagrid,因为它将为您节省大量工作。通常,第三方数据网格应该是可定制的,并且您应该能够使它看起来像您想要的那样-并利用内置的排序、编辑、分组等功能。从头开始创建类似于数据网格的控件并不容易,如果可能的话应该避免


您不必有一个简单的巨型数据网格-您可以装箱一个自定义控件,该控件以您喜欢的格式显示发票,只有在发票显示表格数据时才显示实时数据网格,格式设置为发票本身的一个组成部分

请不要这样:


我正在做类似的事情,客户可以在将发票发送给客户之前编辑甚至删除发票的行项目

他们当前运行业务的应用程序是WebForms Intranet应用程序,因此这是该应用程序的扩展。因此,他们可以相当轻松地添加/删除/编辑行

但伊戈尔是对的。实际上,无论您做什么,您都在谈论数据网格。我想你想要更干净更直观的东西


简单是很困难的。

我想看看已经存在的东西,特别是发票,看看他们是如何做到的

不知道你的公司有多大,但利用大公司的应用程序和用户界面,在用户界面设计和测试上投入数千/数百万美元,从来不会有什么坏处

我会看看以下任何一个(大多数都提供免费试用,或者只是尝试搜索屏幕截图):


只是一些想法。。。希望这有帮助

这类事情的典型UI范例是将其视为两个独立的问题:为用户提供一种查看他可以修改的元素的方式,并为用户提供修改任何特定元素的能力。使用列表控件(
ListBox
ListView
,如果元素按层次结构组织或需要分组为类别,则可能使用
TreeView
)来显示元素,然后当用户选择一个元素时,程序将显示字段名称和可编辑值控件的表格显示

基本上,您将程序的功能分为两类:用户希望对行执行的操作(添加、删除、重新排序、选择)和用户希望对选定行的元素执行的操作

如果使用
DataGridView
,您可以将这两组功能组合成一个,但是正如您所看到的,如果您正在编辑的元素有任何复杂性,那么这会变得非常糟糕


有两种可能的方法:属性表范例(选择对象,单击鼠标右键,选择“属性”,在模式对话框中编辑值),或将窗口拆分为两个面板的范例,其中一个是行,另一个是当前选定行的详细信息。还有很多其他问题。

虽然没有回答你的问题;如果您希望您的用户设计他们希望发票屏幕的外观,我建议使用“我知道”,这正是我想要避免的;)确切地说,它应该很容易使用,因为用户根本不是技术性的。这是我一直在想的,但我想看看是否有人有比定制数据网格更好的想法。谢谢你的回答+1 ;)发票只是一个大得多的应用程序的一部分,因此您建议的网站恐怕不会工作,因为我开发的软件的附加值是发票只需要小的修改/添加,但mattruma提出了一个很好的观点。上面的网站在界面设计上做了艰苦的工作。值得一看的是,他们是如何处理同样的问题的……哇,这听起来很像一个可行的解决方案。然而,对于这个具体案例,我预见到了一个问题。如果行的内容与行本身分离,则创建发票感觉不自然。因此,尽管我认为实施你的想法会降低复杂性,但恐怕也会违反直觉。我将只是做一个简单的模拟两者,让一些人测试两者。我将把你的答案标记为“答案”,因为这是最聪明的想法。当然,理想情况下你应该实现一个就地编辑范例。因此,用户单击一行,然后再次单击或按F2键对其进行编辑,用户得到的不是文本框来编辑文本,而是一个小表单。然而,要实现这一点非常困难,因此它很自然——您实际上是在实现一个类似于下拉列表的东西,而不是包含它包含for的项目