如何循环浏览数据网格视图中的每一行

本文关键字:一行 视图 数据网 何循环 循环 浏览 数据 网格 | 更新日期: 2023-09-27 18:29:36

我正试图使DataGridView的"当前计数"列只接受整数。我在使用时取得了成功

int value;
string str = my_datagridview.Rows[1].Cells["Current Count"].Value.ToString();
if (int.TryParse(str, out value))

但我确信一定有一种方法,我不必为每一行编写代码。我在for循环中尝试过,它给了我一个NullReferenceExeption。

以下是我的代码(包括循环的NullReferenceException):

//'Export data' button
    void export_button_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < my_datagridview.RowCount; i++)
        {
        int value;
        string str = my_datagridview.Rows[i].Cells["Current Count"].Value.ToString();
        if (int.TryParse(str, out value))
        {
            //clears form and ensures new file will have header
            text_box_export.Text = "Item Code,Item Description,Current Count,On Order'r'n";
            //ints for for loops
            int row_count = my_datagridview.RowCount;
            int cell_count = my_datagridview.Rows[0].Cells.Count;
            //captures data for each row
            for (int row_index = 0; row_index <= row_count - 2; row_index++)
            {
                //captures data for each column in each row
                for (int cell_index = 0; cell_index < cell_count; cell_index++)
                {
                    //adds data to messagebox in stocklist format & leaves comma off the end of each line
                    if (cell_index <= 2)
                    {
                        text_box_export.Text = text_box_export.Text + my_datagridview.Rows[row_index].Cells[cell_index].Value.ToString() + ",";
                    }
                    else
                    {
                        text_box_export.Text = text_box_export.Text + my_datagridview.Rows[row_index].Cells[cell_index].Value.ToString();
                    }
                }
                text_box_export.Text = text_box_export.Text + "'r'n";
            }
            //writes new data from messagebox over stocklist.csv file
            System.IO.File.WriteAllText("c:''Stockfile''stocklist.csv", text_box_export.Text);
        }
        else
        {
            MessageBox.Show("Data not saved. Please enter only integers");
        }
    }
}

如何循环浏览数据网格视图中的每一行

如果您的主要目标是

使我的DataGridView的"当前计数"列只接受整数

您可以处理dataGridView1.EditingControl.KeyPress事件并在EventHandler method中验证输入
尝试以下

private string patternToMatchIntegerValues = @"^'d*$";
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
  my_datagridview.EditingControl.KeyPress -= EditingControl_KeyPress;
  my_datagridview.EditingControl.KeyPress += EditingControl_KeyPress;
}
private void EditingControl_KeyPress(object sender, KeyPressEventArgs e)
{
  if (!char.IsControl(e.KeyChar))
  {
    var editingControl = (Control)sender;
    if (!Regex.IsMatch(editingControl.Text + e.KeyChar, patternToMatchIntegerValues))
      // Stop the character from being entered into the control since it is non-numerical.
      e.Handled = true;
  }
}