一个窗体,上面有个datagridview本来绑定一个表,后来客户想再加一列新列,是数据表中没用,可以手动算出来的,于是我给datagridview 新增加了一列类型为DataGridViewTextBoxColumn,名称为mingxi的新列。
在初始化datagridview后赋值,但是窗体上现实不出来。我做的标记message也有值。
 DataTable maindt = gongjv.GetTable(sql);
            this.dataGridView1.DataSource = maindt;
            foreach (DataGridViewRow var in this.dataGridView1.Rows)
            {
                var.Cells["mingxi"].Value = "123";
                var.Cells["strCustomerNameDataGridViewTextBoxColumn"].Value = "222";
                //var.Cells.a
                MessageBox.Show(var.Cells["mingxi"].Value.ToString());
            }
            MessageBox.Show(this.dataGridView1.Rows[0].Cells["mingxi"].Value.ToString());//这里有值
            this.dataGridView1["mingxi", 0].Value = "sss";
于是我在一个按钮里面再次用MessageBox.Show(this.dataGridView1.Rows[0].Cells["mingxi"].Value.ToString());的方法看值,结果报this.dataGridView1.Rows[0].Cells["mingxi"].Value为null。
我用同样的方法,改var.Cells["strCustomerNameDataGridViewTextBoxColumn"].Value(这列是用datatable绑定的)没用问题。
跪求大神,datagridview中不是绑定的列,如何赋值??之前貌似遇到过这个问题,但是用变通的方法绕过去了,但是我觉得,这玩意肯定是能赋值的,这次不想绕了。
跪求!!

解决方案 »

  1.   

    private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)  
    {  
    if(this.dataGridView1.Columns[e.ColumnIndex].HeaderText =="")  
    {  
    e.Value= "";  
    }  
    }
      

  2.   

    直接在DataTable:maindt上加一列再绑定DataColumn column = maindt.Columns.Add("mingxi");
    this.dataGridView1.DataSource = maindt;
      

  3.   

    难道没有什么赋值的方法吗?我觉得datagridview是c#winform里面精髓的精髓,想搞的透彻一点。。
      

  4.   

    额。。我上次貌似就是这样绕过去的。。
    我觉得datagridview是c#winform里面精髓的精髓,想搞的透彻一点。。
    我觉得应该有个方法直接能赋值,或者是赋值之后有个什么方法保存一下就行了,但是查半天查不到。。
      

  5.   

    我本人觉得DataGridView如果搞得太透彻了,会办许多事倍功半的傻事.DataGridView的许多功能,就像一篇从各种经典杂凑出来的文章一样,每句话可能都是经典,但许多地方不能自圆其说.
      

  6.   


    wuyq11给的就是直接赋值啊我个人以为还是修改数据源好,因为你的新增列也是要计算的。直接在DataTable里增加出来,
    然后给新增列赋值,再绑定好。DataGridView也就是表示控件。
      

  7.   

    Public Class Form1    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            
            ' DataTable里只有Name列
            Dim data As DataTable = New DataTable
            data.Columns.Add("Name")
            data.Rows.Add(New Object() {"zhangsan"})
            data.Rows.Add(New Object() {"lisi"})
            data.Rows.Add(New Object() {"wangwu"})        Me.DataGridView1.DataSource = data    End Sub
        
        ' 直接赋值。已经Design了一列——ID列。
        Private Sub DataGridView1_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
            If DataGridView1.Columns(e.ColumnIndex).HeaderText = "ID" Then
                e.Value = "001"
            End If
        End SubEnd Class
      

  8.   

    谢谢fangxinggood,您的赋值是在事件里面赋值的,我想得到一个最直接的赋值方法,
    还有个问题,为什么this.dataGridView1.Rows[0].Cells["mingxi"].Value="123"会无缘无故的实效?
      

  9.   

    谢谢fangxinggood,您的赋值是在事件里面赋值的,我想得到一个最直接的赋值方法,
    还有个问题,为什么this.dataGridView1.Rows[0].Cells["mingxi"].Value="123"会无缘无故的实效?
      

  10.   


    this.dataGridView1.Rows[0].Cells["mingxi"].Value="123" 因为mingxi在数据源里没有,所以不能用ColumnName来赋值。实际你Design列的时候,也没有地方给你设定ColumnName 吧。但是可以通过Index来赋值的。this.dataGridView1.Rows[0].Cells[0].Value="123" 
      

  11.   

    我用index的方式赋值了,
    foreach (DataGridViewRow var in this.dataGridView1.Rows)
      {
      var.Cells[11].Value = "123";
      var.Cells["strCustomerNameDataGridViewTextBoxColumn"].Value = "222";
      //var.Cells.a
      MessageBox.Show(var.Cells["mingxi"].Value.ToString());
      }
    弹出窗口依然可以弹出123,但是窗体里面依然显示不出123,和var.Cells["mingxi"].Value赋值的结果一样,谢谢神了,我就是想知道,这里为什么显示不出来。
      

  12.   

    能显示啊,微软没这么弱 你检查一下DataGridView的属性,你是不是把VirtualMode设为true了?btw: 我说的不对,通过Design设定的Column的Name,也是可以赋值的。
      

  13.   

     // 
                // mingxi
                // 
                this.mingxi.HeaderText = "利息金额明细";
                this.mingxi.Name = "mingxi";
                this.mingxi.ReadOnly = true;
    这是design里面的代码。没问题啊,全都是默认的
      

  14.   

    DataGridView1_CellFormatting
    这个事件里面赋值,确实没问题,我现在就想知道,我那样赋值,为什么不显示呢??各路大神快显神通吧