How to programmatically set cell value in DataGridView?

前端 未结 14 841
無奈伤痛
無奈伤痛 2020-11-30 02:05

I have a DataGridView. Some of the cells receive their data from a serial port: I want to shove the data into the cell, and have it update the underlying bound object.

相关标签:
14条回答
  • 2020-11-30 02:56

    Try this way:

    dataGridView.CurrentCell.Value = newValue;
    
    dataGridView.EndEdit();
    
    dataGridView.CurrentCell.Value = newValue;
    
    dataGridView.EndEdit();
    

    Need to write two times...

    0 讨论(0)
  • 2020-11-30 02:57

    If the DataGridView is databound, you shouldn't directly modify the content of the cell. Instead, you should modify the databound object. You can access that object through the DataBoundItem of the DataGridViewRow :

    MyObject obj = (MyObject)dataGridView.CurrentRow.DataBoundItem;
    obj.MyProperty = newValue;
    

    Note that the bound object should implement INotifyPropertyChanged so that the change is reflected in the DataGridView

    0 讨论(0)
  • 2020-11-30 02:57
    dataGridView1[1,1].Value="tes";
    
    0 讨论(0)
  • 2020-11-30 02:58

    If you don't want to modify the databound object from some reason (for example you want to show some view in your grid, but you don't want it as a part of the datasource object), you might want to do this:

    1.Add column manually:

        DataGridViewColumn c = new DataGridViewColumn();
        DataGridViewCell cell = new DataGridViewTextBoxCell();
    
        c.CellTemplate = cell;
        c.HeaderText = "added";
        c.Name = "added";
        c.Visible = true;
    dgv.Columns.Insert(0, c); 
    

    2.In the DataBindingComplete event do something like this:

    foreach (DataGridViewRow row in dgv.Rows)
    {if (row.Cells[7].Value.ToString()=="1")
    row.Cells[0].Value = "number one"; }
    

    (just a stupid example)

    but remember IT HAS to be in the DataBindingComplete, otherwise value will remain blank

    0 讨论(0)
  • 2020-11-30 02:58

    The following works. I may be mistaken but adding a String value doesn't seem compatible to a DataGridView cell (I hadn't experimented or tried any hacks though).

    DataGridViewName.Rows[0].Cells[0].Value = 1;
    
    0 讨论(0)
  • 2020-11-30 02:58

    I came across the same problem and solved it as following for VB.NET. It's the .NET Framework so you should be possible to adapt. Wanted to compare my solution and now I see that nobody seems to solve it my way.

    Make a field declaration.

    Private _currentDataView as DataView

    So looping through all the rows and searching for a cell containing a value that I know is next to the cell I want to change works for me.

    Public Sub SetCellValue(ByVal value As String)
        Dim dataView As DataView = _currentDataView
    
        For i As Integer = 0 To dataView.Count - 1
            If dataView(i).Row.Item("projID").ToString.Equals("139") Then
                dataView(i).Row.Item("Comment") = value
                Exit For ' Exit early to save performance
            End If
        Next
    End Sub
    

    So that you can better understand it. I know that ColumnName "projID" is 139. I loop until I find it and then I can change the value of "ColumnNameofCell" in my case "Comment". I use this for comments added on runtime.

    0 讨论(0)
提交回复
热议问题