2017-03-28 3 views
-2

definiert Ich bin ziemlich neu in C# -Programmierung. Die folgenden Codes zeigen, wie man eine DataGridView Zeile mit TextBoxen in C# aktualisiert und es funktioniert perfekt, was ich denke, dass es nicht sollte.C# Verwendung der Variablen, die in der gleichen Klasse deklariert ist, aber in einer anderen Methode

int indexRow; // this is declared in Update_DataGridView_Using_TextBoxes class. 

indexRow = e.RowIndex; // this is defined in dataGridView1_CellClick method. 

In btnUpdate_Click Verfahren ist nur indexRow int, nicht e.RowIndex, die in anderen Verfahren definiert ist. Recht?

Dann sollte dieser Code nicht richtig funktionieren, da indexRow in btnUpdate_Click-Methode nichts anderes als int bedeutet.

Aber in Wirklichkeit spezifiziert es die genaue Reihe, die Benutzer auswählten.

Ich denke, dass indexRow irgendwie e.RowIndex drin gehalten hat.

Wie ist die Verwendung von Variablen, die in derselben Klasse deklariert sind, aber in anderen Methoden definiert sind? Oder fehlt mir ein Punkt?

Könnte jemand erklären, wie das funktioniert?

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

Sie haben Recht 'e.RowIndex' Wert wird in dem Feld der Klasse gespeichert, die' indexRow' ist –

+0

Ich verstehe Ihre Frage nicht. Der 'indexRow'-Bereich ist die gesamte Klasse und wird daher jedes Mal aktualisiert, wenn auf eine Zelle geklickt und in der Aktualisierungsmethode – Pikoh

+0

gelesen wird. Lesen Sie im Variablenbereich nach. Stack Overflow Q & A-Format ist nicht der richtige Ort für offene Fragen wie diese. Abstimmung zum Schließen. –

Antwort

0

Die folgende Zeile:

indexRow = e.RowIndex; 

bedeutet: den Inhalt der Variablen e.RowIndex in die Variable indexRow eingeben. In der Programmierung bedeutet = Zuordnung.

Und in Ihrem Fall ist indexRow ein Instanzfeld, was bedeutet, dass es zwischen den Aufrufen der Methoden Ihrer Klasse gehalten wird.

0

IndexRow ist eine Klassenvariable. Solange die Instanz der Klasse existiert, wird der Wert beibehalten.

0
int indexRow; 

Instanzvariablen gehören zu einer Instanz einer Klasse. Jedes Objekt hat eine eigene Kopie der Instanzvariablen. (http://www.whatprogramming.com/csharp/variable-types-and-scope/)

wird für den Klassenbereich festgelegt. Alle Methoden, die Sie in der Klasse hinzufügen, können auf diese Variable zugreifen. Wenn Sie diese Variable innerhalb Methode definiert, dann ist Anwendungsbereich unterschiedliche

Lesen Sie diese

https://msdn.microsoft.com/en-us/library/aa691132(v=vs.71).aspx

Dies wird Ihnen das Verständnis von Umfang in Cis

+0

Danke für Ihre Antwort. –

Verwandte Themen