Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.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# 从C中的另一个窗体将数据从一个窗体传递到datagridview中的特定单元格#_C#_Forms_Datagridview - Fatal编程技术网

C# 从C中的另一个窗体将数据从一个窗体传递到datagridview中的特定单元格#

C# 从C中的另一个窗体将数据从一个窗体传递到datagridview中的特定单元格#,c#,forms,datagridview,C#,Forms,Datagridview,我有一个datagridview,dgv1,它有5列,即:贷方、借方、EntryDescription、AccountingEntry、Employee。由于在EntryDescription中,我可能需要输入几行文本,因此我所做的是创建一个事件,其中当单击EntryDescription时,一个带有richtextbox的新表单将显示为ShowDialog,并且在编写完描述后,用户按下AddDescription按钮,richtextbox中输入的任何文本都应添加到dgv1的当前行和Entry

我有一个datagridview,dgv1,它有5列,即:贷方、借方、EntryDescription、AccountingEntry、Employee。由于在EntryDescription中,我可能需要输入几行文本,因此我所做的是创建一个事件,其中当单击EntryDescription时,一个带有richtextbox的新表单将显示为ShowDialog,并且在编写完描述后,用户按下AddDescription按钮,richtextbox中输入的任何文本都应添加到dgv1的当前行和EntryDescription单元格中。我有一些代码已经装箱,但我不知道继续其余的。我需要你的智慧。谢谢

我知道点击EntryDescription会出现一个下拉文本框,我在其中放置描述是一个好的更好的方法,但我不知道如何做,所以我只是解决了这个问题

在AccountingEntry表单中

public static int RowCount { get; set; }
    public static string DescriptionToAdd { get; set; }
private void dgv1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.ColumnIndex != EntryDescription.Index) return;
        var bal = new AddAccountingEntryDescription
        {
            RowIndex = dgv1.CurrentCell.RowIndex
        };
        bal.ShowDialog();
    }
public int RowIndex { get; set; }
 private void btnAdd_Click(object sender, EventArgs e)
    {
        AccountingEntry.RowCount = RowIndex;
        AccountingEntry.DescriptionToAdd = txtDescriptionToAdd.Text;
    }
在AddAccountingEntryDescription表单中

public static int RowCount { get; set; }
    public static string DescriptionToAdd { get; set; }
private void dgv1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.ColumnIndex != EntryDescription.Index) return;
        var bal = new AddAccountingEntryDescription
        {
            RowIndex = dgv1.CurrentCell.RowIndex
        };
        bal.ShowDialog();
    }
public int RowIndex { get; set; }
 private void btnAdd_Click(object sender, EventArgs e)
    {
        AccountingEntry.RowCount = RowIndex;
        AccountingEntry.DescriptionToAdd = txtDescriptionToAdd.Text;
    }

这很简单。文本输入表单不必知道任何关于网格或其他表单的信息。它所要做的就是通过公共属性公开数据。返回
ShowDialog
后,原始表单从该属性获取数据,并对其执行任何操作。如果要将该文本放入网格中的单元格,请像其他任何时候一样进行操作。

请不要使用
静态属性将值传递回原始表单。那是个坏主意。您需要将对
AccountingEntry
表单的引用传递给新创建的
AddAccountingEntryDescription
,传递方式与传递
RowIndex
的方式相同。这样,您就可以直接与
AccountingEntry
表单通信,而无需使用
static
属性。我不知道如何将文本放在当前行和EntryDescription单元格的datagridview中。我在AccountingEntryForm中创建2个静态属性的原因是,我可以访问这些属性,而无需创建AccountingEntryForm的新实例。我可以很好地传递文本,但我不知道如何在传递文本后立即将其放置在单元格的datagridview中。如果您将数据从数据输入表单推送到网格表单,那么您就做错了。改变它。网格表单应该从数据输入表单中提取数据。这是正确操作的唯一方法。至于将数据放入网格,您可以设置相应单元格的
属性。如果你没有;我还不知道,那么您还没有真正研究如何正确使用
DataGridView
。您已经可以通过网格的
CurrentCell
属性访问单元格。感谢您的建议。我知道如何将数据放入网格。只是我不知道什么会触发将数据放置到datagrid中。这就是我使用RowIndex变量的原因;这是为了让我知道我应该把它放在哪一行,并描述添加,这样我就可以把这些文本及其格式放在特定的单元格中。我不想只在datagrid的特定行和单元格中添加这些文本的按钮。我希望它是自动的,一旦AddAccountingEntryDescription表单关闭,数据将被粘贴到特定的单元格中。我刚刚将操作更改为private void dgv1_CellMouseClick(对象发送者,DataGridViewCellMouseeEventArgs e){if(e.ColumnIndex!=EntryDescription.Index)return;//var bal=new AddAccountingEntryDescription//{////////////////;//bal.ShowDialog();dgv1.Columns[2].DefaultCellStyle.WrapMode=DataGridViewTriState.True;dgv1.AutoSizerowMode=DataGridViewAutoSizerowMode.AllCells;dgv1.Rows[0]。高度=dgv1.RowTemplate.Height;}