首页 > 解决方案 > 如何在文本框MVP c#中显示选定的行

问题描述

我有 MVP 项目我试图将选定的行显示到 3 个文本框和 1 个复选框:我知道我可以从 CellClick 事件中做到这一点,如下所示:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    int index = e.RowIndex;// get the Row Index
    DataGridViewRow selectedRow = dataGridView1.Rows[index];
    textBox1.Text = selectedRow.Cells[0].Value.ToString();
    textBox2.Text = selectedRow.Cells[1].Value.ToString();
    textBox3.Text = selectedRow.Cells[2].Value.ToString();
    textBox4.Text = selectedRow.Cells[3].Value.ToString();
    checkBox1.Checked = Convert.ToBoolean(selectedRow.Cells[4].Value);
} 

但是我想从其他名为 Presenter 的类中调用它,但我遇到了错误:

1.当前上下文中不存在名称“e”。 2. 'object' 不包含'Rows' 的定义,并且找不到接受'object' 类型的第一个参数的可访问扩展方法'Rows'(您是否缺少 using 指令或程序集引用?)。 3.不能将类型'string'隐式转换为'int'。

谢谢...

标签: c#.netvisual-studiodesign-patternsdatagridview

解决方案


Salem,对于我在您的代码中可以看到的内容,根据您的解释,您有一个事件单击,并且您想从演示者本身触发该事件,所以我认为这不是正确的方法,我将通过提取方法来通过单击并从演示者调用新方法,我想您将需要一种从演示者获取索引并将其作为参数传递的方法。

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    int index = e.RowIndex;// get the Row Index
    CheckRowBoxByID(index);
}

void FillDataWithRowByID(int index){
    DataGridViewRow selectedRow = dataGridView1.Rows[index];
    textBox1.Text = selectedRow.Cells[0].Value.ToString();
    textBox2.Text = selectedRow.Cells[1].Value.ToString();
    textBox3.Text = selectedRow.Cells[2].Value.ToString();
    textBox4.Text = selectedRow.Cells[3].Value.ToString();
    checkBox1.Checked = Convert.ToBoolean(selectedRow.Cells[4].Value);
}

这是一个高度概述,可能不正确,但我会进行职责分离。并从演示者调用以下方法。

FillDataWithRowByID(withTheIntID);

基本上你得到它的错误是因为:

  1. 您正在尝试创建演示者中不存在的事件。
  2. 将 Objet 作为一行传递。
  3. 将字符串作为整数传递

希望这是有道理的,干杯。


推荐阅读