C#以另一种形式将Datagridview数据发送到文本框

时间:2016-01-26 20:42:17

标签: c# .net sql-server winforms datagridview

我必须以第一种形式形成数据网格视图,其中显示所有患者记录,并且以第二种形式新建或更新患者的形式。当我从任何患者的第一个表单点击更新按钮时,来自datagrid视图的所有数据都填充第二个表单的文本框。 在主要形式我创建了一个添加文本框与gridview数据的方法这里是方法

public void datainsert(int i)
{
   if (dgvPatientData.Rows.Count != 0)
   {
      form.txtpk.Text = dgvPatientData.Rows[i].Cells[0].Value.ToString();
      form.txtacc.Text = dgvPatientData.Rows[i].Cells[1].Value.ToString();
      form.accdate.Text = dgvPatientData.Rows[i].Cells[2].Value.ToString();
      form.txtssn.Text = dgvPatientData.Rows[i].Cells[3].Value.ToString();
      form.txtregno.Text = dgvPatientData.Rows[i].Cells[4].Value.ToString();
      form.txtlname.Text = dgvPatientData.Rows[i].Cells[5].Value.ToString();
      form.txtfname.Text = dgvPatientData.Rows[i].Cells[6].Value.ToString();
      form.dob.Text = dgvPatientData.Rows[i].Cells[7].Value.ToString();
      form.txtyears.Text = dgvPatientData.Rows[i].Cells[8].Value.ToString();
      form.txtmonths.Text = dgvPatientData.Rows[i].Cells[9].Value.ToString();
      form.combogender.Text = dgvPatientData.Rows[i].Cells[10].Value.ToString();
      form.txtaddress.Text = dgvPatientData.Rows[i].Cells[11].Value.ToString();
      form.txtzip1.Text = dgvPatientData.Rows[i].Cells[12].Value.ToString();
      form.txtzip2.Text = dgvPatientData.Rows[i].Cells[13].Value.ToString();
      form.txtstate1.Text = dgvPatientData.Rows[i].Cells[14].Value.ToString();
      form.txtstate2.Text = dgvPatientData.Rows[i].Cells[15].Value.ToString();
      form.txtphone.Text = dgvPatientData.Rows[i].Cells[16].Value.ToString();
      form.txtfax.Text = dgvPatientData.Rows[i].Cells[17].Value.ToString();
      form.txtchart.Text = dgvPatientData.Rows[i].Cells[18].Value.ToString();
      form.txtpn.Text = dgvPatientData.Rows[i].Cells[19].Value.ToString();
      form.Show();
      this.Visible = false;
   }
}

从更新按钮我调用上面的方法

private void btnupdate_Click(object sender, EventArgs e)
{
   var currentRow = dgvPatientData.CurrentCell.RowIndex;
   datainsert(currentRow);
}

****问题是我在第二个表单上添加上一个按钮**当我传递datagridview行索引-1时,它不起作用

我希望当我点击上一个或下一个按钮时,datagrid视图中的数据会显示在所有文本框中。 在此先感谢

Second Form of patient registration

2 个答案:

答案 0 :(得分:0)

尝试以下方法:

private void btnupdate_Click(object sender, EventArgs e)
    {
        var currentRow = dgvPatientData.CurrentCell.RowIndex;
        datainsert(currentRow - 1);

    }

我在datainsert调用中添加了“-1”。我相信,因为currentRow是一个int,datainsert(currentRow - 1)应该可以工作。

让我知道这是否有效。

您是否收到特定的错误消息?在尝试帮助您解决问题时,这将非常有用。

答案 1 :(得分:0)

我认为在调用datainsert函数时,您应该检查RowIndex是否不是-1。

另一种方法是使用以下方法获取选定的行索引:

dgvPatientData.SelectedRows[0].Index

当然,您应该检查您是否至少有一个选定的行(如果不允许多行选择,则最多应该有一行)。

有点偏离,但可能有用。我会使用DataGridViewCellCollection的String indexer。所以,而不是:

gvPatientData.Rows[i].Cells[4].Value

建议使用以下内容:

gvPatientData.Rows[i].Cells["RegNo"].Value

当要求您将列放在现有列的中间时,这一点尤其重要。