我是C#编程的新手。 下面的代码显示了如何使用TextBox在C#中更新DataGridView行,它运行得很好,我认为它不应该。
int indexRow; // this is declared in Update_DataGridView_Using_TextBoxes class.
indexRow = e.RowIndex; // this is defined in dataGridView1_CellClick method.
在btnUpdate_Click方法中,indexRow只是int,而不是在其他方法中定义的e.RowIndex。正确?
然后这段代码不能正常工作,因为btnUpdate_Click方法中的indexRow并不意味着除了int之外的任何东西。
但实际上,它指定了用户选择的确切行。
我猜indexRow以某种方式保留了e.RowIndex。
如何使用在同一个类中声明但在其他方法中定义的变量? 或者我错过了一些观点?
有人可以解释这是如何运作的吗?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Update_DataGridView_Using_TextBoxes : Form
{
public Update_DataGridView_Using_TextBoxes()
{
InitializeComponent();
}
DataTable table = new DataTable();
int indexRow;
private void Update_DataGridView_Using_TextBoxes_Load(object sender, EventArgs e)
{
table.Columns.Add("Id", typeof(int));
table.Columns.Add("First Name", typeof(string));
table.Columns.Add("Last Name", typeof(string));
table.Columns.Add("Age", typeof(int));
table.Rows.Add(1, "First A", "Last A", 10);
table.Rows.Add(2, "First B", "Last B", 20);
table.Rows.Add(3, "First C", "Last C", 30);
table.Rows.Add(4, "First D", "Last D", 40);
table.Rows.Add(5, "First E", "Last E", 50);
table.Rows.Add(6, "First F", "Last F", 60);
table.Rows.Add(7, "First G", "Last G", 70);
table.Rows.Add(8, "First H", "Last H", 80);
dataGridView1.DataSource = table;
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
indexRow = e.RowIndex;
DataGridViewRow row = dataGridView1.Rows[indexRow];
textBoxID.Text = row.Cells[0].Value.ToString();
textBoxFN.Text = row.Cells[1].Value.ToString();
textBoxLN.Text = row.Cells[2].Value.ToString();
textBoxAGE.Text = row.Cells[3].Value.ToString();
}
private void btnUpdate_Click(object sender, EventArgs e)
{
DataGridViewRow newDataRow = dataGridView1.Rows[indexRow];
newDataRow.Cells[0].Value = textBoxID.Text;
newDataRow.Cells[1].Value = textBoxFN.Text;
newDataRow.Cells[2].Value = textBoxLN.Text;
newDataRow.Cells[3].Value = textBoxAGE.Text;
}
}
}
答案 0 :(得分:0)
IndexRow是一个Class变量,因此只要该类的实例存在,该值就会被保留。
答案 1 :(得分:0)
int indexRow;
实例变量属于类的实例。每个对象都有自己的实例变量副本。 (http://www.whatprogramming.com/csharp/variable-types-and-scope/)
为类范围设置您在类中添加的任何方法都将能够访问此变量。如果您在方法中定义了此变量,则范围是不同的
阅读本文
https://msdn.microsoft.com/en-us/library/aa691132(v=vs.71).aspx
这将使您了解C sharp中的范围
答案 2 :(得分:0)
以下一行:
indexRow = e.RowIndex;
表示:将e.RowIndex
变量的内容放入indexRow
变量中。
在编程中,=
表示作业。
在您的情况下,indexRow
是一个实例字段,这意味着它保持在您的类的方法的调用之间。