我有两个表单,一个包含带有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”针对我的访问器函数。我似乎无法找到问题的根源。先感谢您。
答案 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();