我目前正忙于用户界面应用程序,我真的需要一些帮助。
点击“新订单”后,会出现一个用户 INPUT 窗口,允许用户输入客户的详细信息并选择客户希望订购的产品
选择某些产品会显示网格,允许用户根据客户需求指定每个面板,门或柱的测量值。
最后,当用户点击“保存”时,会出现两个 OUTPUT 表单。一个用于栅栏制造,另一个用于钢铁车间。输出表格包含根据客户规格生产面板等的精确机器制造规格。 (稍后将与实际机器集成)
现在......我真的希望能够保存 INPUT 表单,以便用户以后可以重新打开订单并进行更改或将产品添加到现有订单。
最好在主窗口中有一个选项来打开一个表单,该表单显示客户代码下保存的所有订单,以及作业号和dateStamp。一旦用户选择任何一个订单, INPUT 窗口将打开该特定订单的输入,允许用户添加产品并保存在新的日期戳下。
OUTPUT 表单使用iTextSharp保存为PDF,并且还会打印。然而,这些文件保持不变。
每个Datagrids都暂时与DataTable绑定,但客户详细信息只是存储在变量中的文本框。 ((输入值经过一系列计算,用于在Excel工作表中预读LOOKUP以返回制造和零件索引所需的信息)))
我也尝试过创建一个dataBase,但我无法让它工作。大多数客户&订单数据库依赖于相关列,例如产品代码,客户代码等。但是,我基本上只有信息表。它足以将多个数据网格绑定到特定客户。当所有数据网格几乎具有相同的列时,它甚至更难。高度,宽度,数量等......
如果任何人有任何建议或肆虐的反应导致我的愚蠢......我真的很感激。这是我的第一个C#应用程序......说实话我的第一个实际用户应用程序。我需要开始使用VHDL
提前致谢
Herman Vercuiel
答案 0 :(得分:1)
从应用程序本身退一步,考虑一下您正在创建的实际对象。看起来您可以从创建客户,订单等类中获得很多好处......您不一定需要数据库,文本文件也可以正常工作。阅读以下CodeProject article以获取面向对象设计概念的基本概述,然后考虑如何重新构建应用程序以使用类可以帮助您保留数据。
提示:Serialization可以更容易地保持&检索你的课程。
答案 1 :(得分:0)
如果其他人有类似的问题,我想我会回答这个问题。
在保存数据方面,数据库是最好的方法。当您有多个用户时。写入文本文件将导致权限问题。我遇到的问题是没有任何我可以用作外键的列。如果您想将不同的表与一个客户或订单相关联,这当然是个问题。
我解决这个问题的方法是将每个列数组合并为一个字符串
此代码读取Double-Swing Gate DatagridView并将其合并为单个字符串...读取方法是我自己的。非常简单
if (ds_checkBox.Checked)
{
int numberOfRows_ds = RowCount_gateDouble();
ds_Qty = ReadGateDoubleQty(numberOfRows_ds);
ds_Height = ReadGateDoubleHeight(numberOfRows_ds);
ds_Width = ReadGateDoubleWidth(numberOfRows_ds);
ds_total = CalculateTotal_Gates(ds_Qty, numberOfRows_ds);
string dsgtemp1 = ConvertStringArrayToStringJoin(ds_Qty);
string dsgtemp2 = ConvertStringArrayToStringJoin(ds_Height);
string dsgtemp3 = ConvertStringArrayToStringJoin(ds_Width);
gateDS_data = string.Format("{0}\r\n{1}\r\n{2}", dsgtemp1, dsgtemp2, dsgtemp3);
visible_ds = 1;
}
这允许您将datagrid存储到dataTable中的一个单元格中。因此,对于每个订单,您基本上都有一个dataRow。一行包含客户的基本详细信息和订单信息。由于客户的订单有三个阶段,报价 - >,因此我现在有点复杂了。订单 - >发票。但重点是,所有输入都在一个方便的地方。
然后可以根据原因轻松地在每个相应的数据网格或文本框上显示订单信息
ds_checkBox.Checked = true;
string theGate_ds = stringArray1[13].ToString();
string[] lines_gate_ds = theGate_ds.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
string[] gate_ds_qty = lines_gate_ds[0].Split('.');
string[] gate_ds_height = lines_gate_ds[1].Split('.');
string[] gate_ds_width = lines_gate_ds[2].Split('.');
for (int i = 0; i < gate_ds_qty.Length; i++)
{
// Create a new row.
InputDataSet.Gate_ds_InputRow newOutputRow;
newOutputRow = inputDataSet1.Gate_ds_Input.NewGate_ds_InputRow();
newOutputRow.gate_ds_qty = string.Format("{0}", gate_ds_qty[i]);
newOutputRow.gate_ds_height = string.Format("{0}", gate_ds_height[i]);
newOutputRow.gate_ds_width = string.Format("{0}", gate_ds_width[i]);
// Add the row to the Region table
this.inputDataSet1.Gate_ds_Input.Rows.Add(newOutputRow);
// Save the new row to the database
}
我使用了MySql,值得学习如何使用任何类型的数据库