c#使用在同一个类中声明但在其他方法

时间:2017-03-28 09:20:30

标签: c# class methods datagridview textbox

我是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;
        }
    }
}

3 个答案:

答案 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是一个实例字段,这意味着它保持在您的类的方法的调用之间。