当前位置:编程学习 > C#/ASP.NET >>

如何在DataGridView的cell中填加控件来显示数据

比如说我有一个仪表盘的控件,如何使DataGridView的cell中是通过这个控件来显示数据呢?有一种方法是重写DataGridViewColumn和DataGridViewCell这两个类。但是我没有仪表控件的源码,不知道如何能重写这两个类。看好多帖子都说“编辑模板”,但我没找到DataGridView控件在哪里可以编辑模板。。 --------------------编程问答-------------------- 顶 --------------------编程问答-------------------- 做起来有点难度啊。。。 --------------------编程问答-------------------- 编辑模板 应该是Asp.net中的GridView,你的DataGridView应该是winform中的吧。 --------------------编程问答-------------------- 这篇文章阐述了如何在DataGridView中使用RadioButton控件,你可以试着用你的控件替换RadioButton控件:

Build a Custom RadioButton Cell and Column for the DataGridView Control
http://msdn.microsoft.com/en-us/library/aa730882.aspx --------------------编程问答-------------------- asp.net中DataGridView可以编辑模板 --------------------编程问答-------------------- http://www.cnblogs.com/gentlewolf/archive/2007/09/07/886053.html
http://www.cnblogs.com/CodeAnyWhere/archive/2005/12/17/298879.aspx --------------------编程问答-------------------- 看看下面的代码管用么。。

用CellEndEdit事件触发函数去响应cell值的改变. 
combbox绑定的问题,我把datagridview的那一列定义成DataGridViewComboBoxColumn,然后再把指定cell强制转换为datagridviewcomboboxcell就可以绑定数据了.

// 你可以在DataGridView的EditingControlShowing事件中加入如下代码,来给你的ComboxBox加一个事件,在这个事件中处理绑定的问题。 
private void variousCostDgv3_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 

  if (e.Control.GetType().Equals(typeof(DataGridViewComboBoxEditingControl))) 
  { 
    DataGridViewComboBoxEditingControl editingControl = e.Control as DataGridViewComboBoxEditingControl; 
    editingControl.DropDownClosed += new EventHandler(editingControl_DropDownClosed); 
  } 


// 然后,在这个事件处理函数中做绑定的处理,我这段代码是动态的改变一个cell的值,并修改对齐方式。你可以改成绑定新Cell的操作。 

private void editingControl_DropDownClosed(object sender, EventArgs e) 

  DataGridViewComboBoxEditingControl ctl = sender as DataGridViewComboBoxEditingControl; 
  DataRowView drv = this.variousCostDgv3.Rows[ctl.EditingControlRowIndex].DataBoundItem as DataRowView; 
  drv["unit_name"] = ctl.Text; 
  drv["VARIOUS_COST_UNIT"] = CommonDataManager.GetChargeUnitData().GetCD(ctl.Text); 
  if (CommonDataManager.GetChargeUnitData().GetCD(ctl.Text).Equals(EstimateCommon.CHARGE_UNIT_ALL)) 
  { 
    drv["number"] = "-"; 
    drv["PEOPLE_NUM"] = 1; 
    this.variousCostDgv3["numberCol3", ctl.EditingControlRowIndex].ReadOnly = true; 
    this.variousCostDgv3["numberCol3", ctl.EditingControlRowIndex].Style.Alignment = 
                                                   DataGridViewContentAlignment.MiddleCenter; 
  } 
  else 
  { 
    drv["number"] = drv["PEOPLE_NUM"]; 
    if (EstimateCommon.ESTIMATE_TYPE_REAL.Equals(mDsForInternal.Tables["CZ_ESTIMATE"].Rows[0]["ESTIMATE_TYPE"].ToString())) 
    { 
      this.variousCostDgv3["numberCol3", ctl.EditingControlRowIndex].ReadOnly = false; 
    } 
    this.variousCostDgv3["numberCol3", ctl.EditingControlRowIndex].Style.Alignment = 
             DataGridViewContentAlignment.MiddleRight; 
    } 
    this.variousCostDgv3.Refresh(); 
}

转自:http://www.cnblogs.com/peijian708/archive/2008/08/09/1264281.html
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,