【问题标题】:C# reading datagridview from one form to another formC#从一个表单读取datagridview到另一个表单
【发布时间】:2014-03-19 08:20:40
【问题描述】:

我有两种形式,一种包含一个带有来自 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;
}

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

【问题讨论】:

  • 那么你没有正确存储当前活动的单元格索引。

标签: c# winforms datagridview


【解决方案1】:

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

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

尝试将您的值作为构造函数中的参数传递给EditRecord 表单:
以 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();

【讨论】:

  • 是的,你理解我的正确。谢谢!这个解决方案对我很有效。
【解决方案2】:

试试

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多