C#将datagridview从一种形式读取到另一种形式

时间:2014-03-19 08:20:41

标签: c# winforms datagridview

我有两个表单,一个包含带有MS Access数据源的datagridview控件。数据正确显示在datagridview上。首先,我在该数据网格视图中选择一个单元格,然后获取当前所选单元格的行索引。我在访问器函数中使用该行索引(代码在主窗体中):

public String Name
{ 
    get 
    { 
        return dataGridView1.Rows[selrow].Cells[1].Value.ToString(); 
    } 
}

selrow包含当前所选单元格的行索引。接下来,我单击“编辑记录”按钮,这将显示我的第二个表单作为模式表单。我想在文本框中显示上述访问者的值,所以代码是这样的(代码是第二种形式):

private void EditRecord_Load(object sender, EventArgs e)
{
    CashLoan main = new CashLoan();
    txtEName.Text = main.name;
}

但是当我尝试运行和调试时,我得到这个“索引超出范围。必须是非负的且小于集合的大小。参数名称:index”针对我的访问器函数。我似乎无法找到问题的根源。先感谢您。

2 个答案:

答案 0 :(得分:1)

尝试

public String Name
{ 
    get 
    { 
        return dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1].Value.ToString(); 
    } 
}

因为我猜你当前选择的行索引有问题。您的行也可能只有一个单元格。在这种情况下,将0替换为1因为索引从0开始(所以0 = 1,1 = 2等...)

dataGridView1.Rows[selrow].Cells[0].Value.ToString(); 

答案 1 :(得分:1)

如果我了解您希望在Editrecord表单的文本框中显示主要表单的显示值。如果是的话

Load处理程序中,您可以创建主窗体的新实例(CashLoan) 并尝试从主数据的空数据视图中读取值(我假设您没有使用构造函数中的数据填充datagridview)。

尝试将您的值传递给EditRecord form作为contructor中的参数:
在EditRecord形式:

private String _originalValue;
public EditRecord(String originalValue)
{
    _originalValue = originalValue;
}
//Then in Load handler
private void EditRecord_Load(object sender, EventArgs e)
{
    this.txtEName.Text = _originalValue;
}

//In main form
EditRecord frm = new EditRecord(this.name);
frm.ShowDialog();