日期:2014-05-18  浏览次数:21004 次

winform datagridview 的非绑定列问题,我就奇了怪了。。
一个窗体,上面有个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中不是绑定的列,如何赋值??之前貌似遇到过这个问题,但是用变通的方法绕过去了,但是我觉得,这玩意肯定是能赋值的,这次不想绕了。
跪求!!


------解决方案--------------------
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if(this.dataGridView1.Columns[e.ColumnIndex].HeaderText =="")
{
e.Value= "";
}
}
------解决方案--------------------
直接在DataTable:maindt上加一列再绑定

DataColumn column = maindt.Columns.Add("mingxi");
this.dataGridView1.DataSource = maindt;

------解决方案--------------------
探讨
引用:
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if(this.dataGridView1.Columns[e.ColumnIndex].HeaderText =="")
{
e.Value = "";
……

------解决方案--------------------
VB.NET code
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 Sub

End Class