DataGridView.Rows Свойство

Определение

Получает коллекцию, содержащую все строки в элементе управления DataGridView.Gets a collection that contains all the rows in the DataGridView control.

public:
 property System::Windows::Forms::DataGridViewRowCollection ^ Rows { System::Windows::Forms::DataGridViewRowCollection ^ get(); };
[System.ComponentModel.Browsable(false)]
public System.Windows.Forms.DataGridViewRowCollection Rows { get; }
member this.Rows : System.Windows.Forms.DataGridViewRowCollection
Public ReadOnly Property Rows As DataGridViewRowCollection

Значение свойства

Объект DataGridViewRowCollection, содержащий все строки в элементе управления DataGridView.A DataGridViewRowCollection that contains all the rows in the DataGridView.

Атрибуты

Примеры

В следующем примере кода показано, как создать несвязанную DataGridView; Задайте свойства ColumnHeadersVisible, ColumnHeadersDefaultCellStyle и ColumnCount. и используют свойства Rows и Columns.The following code example demonstrates how to create an unbound DataGridView; set the ColumnHeadersVisible, ColumnHeadersDefaultCellStyle, and ColumnCount properties; and use the Rows and Columns properties. Также показано, как использовать версии методов AutoResizeColumnHeadersHeight и AutoResizeRows для правильного изменения размера заголовков столбцов и строк.It also demonstrates how to use a version of the AutoResizeColumnHeadersHeight and AutoResizeRows methods to properly size the column headers and the rows. Чтобы выполнить этот пример, вставьте следующий код в форму, содержащую DataGridView с именем dataGridView1 и кнопку с именем Button1, а затем вызовите метод InitializeDataGridView из конструктора формы или обработчика событий Load.To run this example, paste the following code into a form that contains a DataGridView named dataGridView1 and a button named Button1, and then call the InitializeDataGridView method from the form's constructor or Load event handler. Убедитесь, что все события соединены с их обработчиками событий.Ensure all events are connected with their event handlers.

   void InitializeDataGridView()
   {
      this->Size = System::Drawing::Size( 600, 600 );
      dataGridView1->Size = System::Drawing::Size( 450, 400 );

      // Create an unbound DataGridView by declaring a column count.
      dataGridView1->ColumnCount = 4;
      dataGridView1->ColumnHeadersVisible = true;

      // Set the column header style.
      DataGridViewCellStyle ^ columnHeaderStyle = gcnew DataGridViewCellStyle;
      columnHeaderStyle->BackColor = Color::Aqua;
      columnHeaderStyle->Font = gcnew System::Drawing::Font( "Verdana",10,FontStyle::Bold );
      dataGridView1->ColumnHeadersDefaultCellStyle = columnHeaderStyle;

      // Set the column header names.
      dataGridView1->Columns[ 0 ]->Name = "Recipe";
      dataGridView1->Columns[ 1 ]->Name = "Category";
      dataGridView1->Columns[ 2 ]->Name = "Main Ingredients";
      dataGridView1->Columns[ 3 ]->Name = "Rating";

      // Populate the rows.
      array<String^>^row1 = gcnew array<String^>{
         "Meatloaf","Main Dish","ground beef","**"
      };
      array<String^>^row2 = gcnew array<String^>{
         "Key Lime Pie","Dessert","lime juice, evaporated milk","****"
      };
      array<String^>^row3 = gcnew array<String^>{
         "Orange-Salsa Pork Chops","Main Dish","pork chops, salsa, orange juice","****"
      };
      array<String^>^row4 = gcnew array<String^>{
         "Black Bean and Rice Salad","Salad","black beans, brown rice","****"
      };
      array<String^>^row5 = gcnew array<String^>{
         "Chocolate Cheesecake","Dessert","cream cheese","***"
      };
      array<String^>^row6 = gcnew array<String^>{
         "Black Bean Dip","Appetizer","black beans, sour cream","***"
      };
      array<Object^>^rows = {row1,row2,row3,row4,row5,row6};
      System::Collections::IEnumerator^ myEnum = rows->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         array<String^>^rowArray = safe_cast<array<String^>^>(myEnum->Current);
         dataGridView1->Rows->Add( rowArray );
      }
   }

   void Button1_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
   {
      // Resize the height of the column headers. 
      dataGridView1->AutoResizeColumnHeadersHeight();

      // Resize all the row heights to fit the contents of all non-header cells.
      dataGridView1->AutoResizeRows(
            DataGridViewAutoSizeRowsMode::AllCellsExceptHeaders);
   }

   void InitializeContextMenu()
   {
      // Create the menu item.
      MenuItem^ getRecipe = gcnew MenuItem( "Search for recipe",gcnew System::EventHandler( this, &Form1::OnMenuClick ) );

      // Add the menu item to the shortcut menu.
      System::Windows::Forms::ContextMenuStrip^ recipeMenu = gcnew System::Windows::Forms::ContextMenuStrip();

      // Set the shortcut menu for the first column.
      dataGridView1->Columns[ 0 ]->ContextMenuStrip = recipeMenu;
   }

   void OnMenuClick( Object^ /*sender*/, System::EventArgs^ /*e*/ )
   {
      if ( dataGridView1->CurrentCell != nullptr )
      {
         //Retrieve the recipe name.
         String^ recipeName = dynamic_cast<String^>(dataGridView1->CurrentCell->Value);

         //Search for the recipe.
         System::Diagnostics::Process::Start( String::Format( "http://search.msn.com/results.aspx?q={0}", recipeName ), nullptr );
      }
   }

private:

private void InitializeDataGridView()
{
    // Create an unbound DataGridView by declaring a column count.
    dataGridView1.ColumnCount = 4;
    dataGridView1.ColumnHeadersVisible = true;

    // Set the column header style.
    DataGridViewCellStyle columnHeaderStyle = new DataGridViewCellStyle();

    columnHeaderStyle.BackColor = Color.Beige;
    columnHeaderStyle.Font = new Font("Verdana", 10, FontStyle.Bold);
    dataGridView1.ColumnHeadersDefaultCellStyle = columnHeaderStyle;

    // Set the column header names.
    dataGridView1.Columns[0].Name = "Recipe";
    dataGridView1.Columns[1].Name = "Category";
    dataGridView1.Columns[2].Name = "Main Ingredients";
    dataGridView1.Columns[3].Name = "Rating";

    // Populate the rows.
    string[] row1 = new string[] { "Meatloaf", "Main Dish", "ground beef",
        "**" };
    string[] row2 = new string[] { "Key Lime Pie", "Dessert", 
        "lime juice, evaporated milk", "****" };
    string[] row3 = new string[] { "Orange-Salsa Pork Chops", "Main Dish", 
        "pork chops, salsa, orange juice", "****" };
    string[] row4 = new string[] { "Black Bean and Rice Salad", "Salad", 
        "black beans, brown rice", "****" };
    string[] row5 = new string[] { "Chocolate Cheesecake", "Dessert", 
        "cream cheese", "***" };
    string[] row6 = new string[] { "Black Bean Dip", "Appetizer", 
        "black beans, sour cream", "***" };
    object[] rows = new object[] { row1, row2, row3, row4, row5, row6 };

    foreach (string[] rowArray in rows)
    {
        dataGridView1.Rows.Add(rowArray);
    }
}

private void button1_Click(object sender, System.EventArgs e)
{
    // Resize the height of the column headers. 
    dataGridView1.AutoResizeColumnHeadersHeight();

    // Resize all the row heights to fit the contents of all non-header cells.
    dataGridView1.AutoResizeRows(
        DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders);
}

private void InitializeContextMenu()
{
    // Create the menu item.
    ToolStripMenuItem getRecipe = new ToolStripMenuItem("Search for recipe", null,
        new System.EventHandler(ShortcutMenuClick));

    // Add the menu item to the shortcut menu.
    ContextMenuStrip recipeMenu = new ContextMenuStrip();
    recipeMenu.Items.Add(getRecipe); 

    // Set the shortcut menu for the first column.
    dataGridView1.Columns[0].ContextMenuStrip = recipeMenu;
    dataGridView1.MouseDown += new MouseEventHandler(dataGridView1_MouseDown);
}

private DataGridViewCell clickedCell;

private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
// If the user right-clicks a cell, store it for use by the shortcut menu.
    if (e.Button == MouseButtons.Right)
    {
        DataGridView.HitTestInfo hit = dataGridView1.HitTest(e.X, e.Y);
        if (hit.Type == DataGridViewHitTestType.Cell)
        {
            clickedCell =
                dataGridView1.Rows[hit.RowIndex].Cells[hit.ColumnIndex];
        }
    }
}

private void ShortcutMenuClick(object sender, System.EventArgs e)
{
    if (clickedCell != null)
    {
        //Retrieve the recipe name.
        string recipeName = (string)clickedCell.Value;

        //Search for the recipe.
        System.Diagnostics.Process.Start(
            "http://search.msn.com/results.aspx?q=" + recipeName);
            //null);
    }
}
Private Sub InitializeDataGridView()

    ' Create an unbound DataGridView by declaring a column count.
    dataGridView1.ColumnCount = 4
    dataGridView1.ColumnHeadersVisible = True

    ' Set the column header style.
    Dim columnHeaderStyle As New DataGridViewCellStyle()

    columnHeaderStyle.BackColor = Color.Beige
    columnHeaderStyle.Font = New Font("Verdana", 10, FontStyle.Bold)
    dataGridView1.ColumnHeadersDefaultCellStyle = columnHeaderStyle

    ' Set the column header names.
    dataGridView1.Columns(0).Name = "Recipe"
    dataGridView1.Columns(1).Name = "Category"
    dataGridView1.Columns(2).Name = "Main Ingredients"
    dataGridView1.Columns(3).Name = "Rating"

    ' Populate the rows.
    Dim row1() As String = {"Meatloaf", "Main Dish", "ground beef", "**"}
    Dim row2() As String = _
        {"Key Lime Pie", "Dessert", "lime juice, evaporated milk", "****"}
    Dim row3() As String = {"Orange-Salsa Pork Chops", "Main Dish", _
        "pork chops, salsa, orange juice", "****"}
    Dim row4() As String = {"Black Bean and Rice Salad", "Salad", _
        "black beans, brown rice", "****"}
    Dim row5() As String = _
        {"Chocolate Cheesecake", "Dessert", "cream cheese", "***"}
    Dim row6() As String = _
        {"Black Bean Dip", "Appetizer", "black beans, sour cream", "***"}
    Dim rows() As Object = {row1, row2, row3, row4, row5, row6}

    Dim rowArray As String()
    For Each rowArray In rows
        dataGridView1.Rows.Add(rowArray)
    Next rowArray

End Sub

Private Sub button1_Click(ByVal sender As Object, _
    ByVal e As System.EventArgs) Handles button1.Click

    ' Resize the height of the column headers. 
    dataGridView1.AutoResizeColumnHeadersHeight()

    ' Resize all the row heights to fit the contents of all 
    ' non-header cells.
    dataGridView1.AutoResizeRows( _
        DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders)

End Sub

Private Sub InitializeContextMenu()

    ' Create the menu item.
    Dim getRecipe As New ToolStripMenuItem( _
        "Search for recipe", Nothing, AddressOf ShortcutMenuClick)

    ' Add the menu item to the shortcut menu.
    Dim recipeMenu As New ContextMenuStrip()
    recipeMenu.Items.Add(getRecipe)

    ' Set the shortcut menu for the first column.
    dataGridView1.Columns(0).ContextMenuStrip = recipeMenu

End Sub

Private clickedCell As DataGridViewCell

Private Sub dataGridView1_MouseDown(ByVal sender As Object, _
    ByVal e As MouseEventArgs) Handles dataGridView1.MouseDown

    ' If the user right-clicks a cell, store it for use by the 
    ' shortcut menu.
    If e.Button = MouseButtons.Right Then
        Dim hit As DataGridView.HitTestInfo = _
            dataGridView1.HitTest(e.X, e.Y)
        If hit.Type = DataGridViewHitTestType.Cell Then
            clickedCell = _
                dataGridView1.Rows(hit.RowIndex).Cells(hit.ColumnIndex)
        End If
    End If

End Sub

Private Sub ShortcutMenuClick(ByVal sender As Object, _
    ByVal e As System.EventArgs)

    If (clickedCell IsNot Nothing) Then
        'Retrieve the recipe name.
        Dim recipeName As String = CStr(clickedCell.Value)

        'Search for the recipe.
        System.Diagnostics.Process.Start( _
            "http://search.msn.com/results.aspx?q=" + recipeName)
    End If

End Sub

Комментарии

Можно использовать коллекцию Rows, чтобы вручную заполнить элемент управления DataGridView, а не привязать его к источнику данных.You can use the Rows collection to manually populate a DataGridView control instead of binding it to a data source. В следующем примере показано, как вручную добавлять и вставлять строки.The following example shows you how to manually add and insert rows. В этом примере предполагается, что вы добавили четыре экземпляра DataGridViewTextBoxColumn в коллекцию Columns элемента управления.This example assumes that you have added four DataGridViewTextBoxColumn instances to the control's Columns collection.

Me.dataGridView1.Rows.Add("five", "six", "seven", "eight")  
Me.dataGridView1.Rows.Insert(0, "one", "two", "three", "four")  
this.dataGridView1.Rows.Add("five", "six", "seven", "eight");this.dataGridView1.Rows.Insert(0, "one", "two", "three", "four");  

Подробный пример, в котором программным образом заполняет несвязанный элемент управления DataGridView, см. в разделе "пример".For a detailed example that programmatically populates an unbound DataGridView control, see the Example section.

Строки содержат сведения о стиле в дополнение к значениям ячеек.Rows include style information in addition to cell values. По этой причине может потребоваться добавить или вставить строки на основе уже существующих строк.For this reason, you might want to add or insert rows based on existing rows that you have already styled. Это можно сделать с помощью методов AddCopy, AddCopies, InsertCopy и InsertCopies.You can do this using the AddCopy, AddCopies, InsertCopy, and InsertCopies methods.

Можно также использовать коллекцию Rows для изменения значений в элементе управления или для удаления строк.You can also use the Rows collection to modify the values in the control or to remove rows. Можно изменять значения или удалять строки независимо от того, привязан ли элемент управления к внешнему источнику данных.You can modify values or remove rows regardless of whether the control is bound to an external data source. Если источник данных существует, изменения вносятся непосредственно в источник данных.If there is a data source, the changes are made directly to the data source. Однако при этом может потребоваться принудительная отправка обновлений источника данных в удаленную базу данных.You may still need to push the data source updates to a remote database, however. Дополнительные сведения см. в разделе [Практическое руководство. Привяжите данные к Windows Forms элемента управления DataGridView @ no__t-0.For more information, see How to: Bind Data to the Windows Forms DataGridView Control.

В следующем примере показано, как программно изменить значения ячеек.The following example shows you how to modify cell values programmatically.

' Modify the value in the first cell of the second row.  
Me.dataGridView1.Rows[1].Cells[0].Value = "new value"  
  
' The previous line is equivalent to the following line.  
Me.dataGridView1[0, 1].Value = "new value"  
// Modify the value in the first cell of the second row.  
this.dataGridView1.Rows[1].Cells[0].Value = "new value";  
  
// The previous line is equivalent to the following line.  
this.dataGridView1[0, 1].Value = "new value";  

Помимо стандартных возможностей коллекции для получения сведений о строках можно использовать коллекцию Rows.In addition to the standard collection capabilities, you can use the Rows collection to retrieve information about rows. Чтобы определить состояние определенной строки, используйте метод GetRowState.Use the GetRowState method to determine the state of a particular row. Для определения числа строк или общей высоты строк в определенном состоянии используйте методы GetRowCount и GetRowsHeight.Use the GetRowCount and GetRowsHeight methods to determine the number of rows or the combined height of rows in a particular state. Чтобы получить индекс строки с определенным состоянием, используйте методы GetFirstRow, GetLastRow, GetNextRow и GetPreviousRow.To retrieve the index of a row with a particular state, use the GetFirstRow, GetLastRow, GetNextRow, and GetPreviousRow methods.

В следующем примере показано, как получить индекс первой выбранной строки, а затем использовать его для программного удаления строки.The following example shows you how to retrieve the index of the first selected row, and then use it to programmatically delete the row.

Dim rowToDelete As Int32 = Me.dataGridView1.Rows.GetFirstRow( _  
    DataGridViewElementStates.Selected)  
If rowToDelete > -1 Then  
    Me.dataGridView1.Rows.RemoveAt(rowToDelete)  
End If  
Int32 rowToDelete = this.dataGridView1.Rows.GetFirstRow(  
    DataGridViewElementStates.Selected);  
if (rowToDelete > -1)  
{  
    this.dataGridView1.Rows.RemoveAt(rowToDelete);  
}  

Для повышения производительности DataGridViewRowCollection, возвращаемый свойством Rows, может включать общие и несовместно используемые строки.To improve performance, the DataGridViewRowCollection returned by the Rows property can include shared and unshared rows. Общие строки совместно используют память для снижения затрат на большой набор записей.Shared rows share memory to reduce the cost of a large record set. Если набор записей очень большой, следует внимательно следить за тем, чтобы строки были общими как можно больше при доступе к свойству Rows.If your record set is very large, you should be careful to keep the rows shared as much as possible when accessing the Rows property.

Подробнее см. в разделе Масштабирование элемента управления DataGridView в Windows Forms.For more information, see Best Practices for Scaling the Windows Forms DataGridView Control.

Применяется к

Дополнительно