C# 保存用C动态填充的datagridview#

C# 保存用C动态填充的datagridview#,c#,sql-server,dynamic,datagridview,C#,Sql Server,Dynamic,Datagridview,我正在寻找一种方法来解决我的问题,与前面的一个问题有关 我必须在Datagridview中管理不同的付款方式 用户(例如出纳)必须在服务结束时检查他们所有的钱 在父窗体中,我显示付款方式名称,自动显示来自其他数据库的金额,两个空列和一个带有按钮“详细信息”的列 最初,父窗体中的datagridview如下所示: PAYMENT | QTY | AUTOMATIC | MANUAL | DIFF. | DETAILS | _____________|______

我正在寻找一种方法来解决我的问题,与前面的一个问题有关

我必须在Datagridview中管理不同的付款方式

用户(例如出纳)必须在服务结束时检查他们所有的钱

在父窗体中,我显示付款方式名称,自动显示来自其他数据库的金额,两个空列和一个带有按钮“详细信息”的列

最初,父窗体中的datagridview如下所示:

PAYMENT      |   QTY   |  AUTOMATIC  |  MANUAL  |  DIFF.   |  DETAILS  |
_____________|_________|_____________|__________|__________|___________|
CREDIT CARD  |   2     |    46.80    |          |          | [DETAILS] |
CHECK        |   1     |    25.65    |          |          | [DETAILS] |
BANK TRANSFER|   1     |   150.25    |          |          | [DETAILS] |
    PAYMENT      |   QTY   |  AUTOMATIC  |  MANUAL  |  DIFF.   |  DETAILS  |
    _____________|_________|_____________|__________|__________|___________|
    CREDIT CARD  |   2     |    46.80    |  33.90   | -12.90   | [DETAILS] |
    CHECK        |   1     |    25.65    |          |          | [DETAILS] |
    BANK TRANSFER|   1     |   150.25    |          |          | [DETAILS] |
当用户单击详细信息按钮时,我将显示一个子表单,其中包含另一个datagridview,其中包含付款方法的详细信息。我在父窗体中按如下方式加载窗体:

var details = new FrmDetails("FormName", "IdOfPaymentMethod");
details.ShowDialog();
例如,对于信用卡,我在子表单中得到一个datagridview,如下所示:

  DATE/HOUR          | TICKET NUMBER |  AMOUNT  |  CHECK  |
_____________________|_______________|__________|_________|
 01/11/2015 - 08:23  |   138170      |  12.90   |         |
 01/11/2015 - 09:45  |   138191      |  33.90   |    v    |
这是用户预先选择的日期的两次信用卡付款。两者的总和是您在父窗体的“自动”列中看到的。最后一列“CHECK”包含复选框,用户检查是否携带了付款

在我的示例中,用户仅使用33.90检查第二行,而不检查另一行。 当他们关闭此详细信息表单时,父datagridview将如下更新:

PAYMENT      |   QTY   |  AUTOMATIC  |  MANUAL  |  DIFF.   |  DETAILS  |
_____________|_________|_____________|__________|__________|___________|
CREDIT CARD  |   2     |    46.80    |          |          | [DETAILS] |
CHECK        |   1     |    25.65    |          |          | [DETAILS] |
BANK TRANSFER|   1     |   150.25    |          |          | [DETAILS] |
    PAYMENT      |   QTY   |  AUTOMATIC  |  MANUAL  |  DIFF.   |  DETAILS  |
    _____________|_________|_____________|__________|__________|___________|
    CREDIT CARD  |   2     |    46.80    |  33.90   | -12.90   | [DETAILS] |
    CHECK        |   1     |    25.65    |          |          | [DETAILS] |
    BANK TRANSFER|   1     |   150.25    |          |          | [DETAILS] |
这是应用程序的简单操作。 问题是我必须将每个datagridview“详细信息”保存在SQL数据库(SQL Server)中。用户必须在这些付款之前输入其他信息,因此我认为解决方案是将以前的数据保存在表“ENTRIES”中,然后检索ID max,并将每个datagridview“details”以链接ID_条目作为外键保存。 我可以用一个datagridview“details”来实现这一点,但当我按下父窗体上的“others details”按钮时,我会丢失所有的选中/取消选中

是否有办法将每个datagridview“详细信息”保留到最终录制


我希望我的信息是清晰而全面的。

每个
FrmDetails
实例的范围只是按钮单击事件的范围-因此数据不见了

  • 或者,您必须为每个付款方式行保留一个
    FrmDetails
    实例集合:

    var details = new List<FrmDetails>();
    
    foreach (var row in dataGridView1.Rows)
    {
        var detail = new FrmDetails("FormName", "IdOfPaymentMethod");
        details.Add(detail);
    }
    
    // And when clicking on a Details button:
    details[e.ColumnIndex].ShowDialog();
    

谢谢您的回答。我已经找到了解决办法,但你的和我的很相似。我创建了一个datagridview表,我使用e.RowIndex访问它以了解我使用的是哪种付款方式。无论如何,谢谢你:)我很乐意帮忙,即使只是为了证实你已经发现了什么。:)