public class DataGridTreeTextBoxColumn : DataGridTextBoxColumn
{
//自己继承了一个类
//重载了他的paint方法
protected override void Paint(System.Drawing.Graphics g,
System.Drawing.Rectangle bounds, System.Windows.Forms.CurrencyManager
source, int rowNum, System.Drawing.Brush backBrush, System.Drawing.Brush
foreBrush, bool alignToRight)
{
/*
我如果得到正在重画的这一行对应datatable的哪一行
这个rowNum参数是grid的行号
当我这样用的时候
if (the_datatable_.Rows[rowNum]["haschild"].ToString()=="False")
显然是错误的
因为当用视图筛选后这个rowNum就不对应datatable的那一行了
*/
}
}问题:
怎样根据paint传过来的参数定位到datatable对应的行(这个datatable已知)
{
//自己继承了一个类
//重载了他的paint方法
protected override void Paint(System.Drawing.Graphics g,
System.Drawing.Rectangle bounds, System.Windows.Forms.CurrencyManager
source, int rowNum, System.Drawing.Brush backBrush, System.Drawing.Brush
foreBrush, bool alignToRight)
{
/*
我如果得到正在重画的这一行对应datatable的哪一行
这个rowNum参数是grid的行号
当我这样用的时候
if (the_datatable_.Rows[rowNum]["haschild"].ToString()=="False")
显然是错误的
因为当用视图筛选后这个rowNum就不对应datatable的那一行了
*/
}
}问题:
怎样根据paint传过来的参数定位到datatable对应的行(这个datatable已知)
解决方案 »
- 不知有多少人用StarUML,闲来无事做了个汉化
- “线程”为什么会自动“Stopped”???
- .net方向学起来有点迷茫
- .NET下梦寐以求的组件现在热送中... ... ... ... ... ...
- vs2008 iis7.5文件访问权限问题
- C# 调用 C/C++ DLL的问题!
- 想做一个客服系统,该怎么做?
- 急问:C#能工程能编译为WIN32 DLL么
- 请问如何取得rowstate为delete的记录中的内容?不会报错误:can't access the deleted row through the row
- winform
- winform,怎样先后调用两个程序。
- 如何在FrameWork精简版里调用其它的程序!
这个里面比较全面,你可以在这里面找找看!
{
public NoKeyUpCombo ColumnComboBox = null;
private System.Windows.Forms.CurrencyManager _source = null;
private int _rowNum;
private bool _isEditing = false;
ComboValueChanged _valueChanging;
public DataGridComboBoxColumn(ComboValueChanged valueChanging) : base()
{
_valueChanging = valueChanging;
ColumnComboBox = new NoKeyUpCombo();
ColumnComboBox.Leave += new EventHandler(LeaveComboBox);
// ColumnComboBox.Enter += new EventHandler(ComboMadeCurrent);
ColumnComboBox.SelectedIndexChanged += new System.EventHandler(ComboIndexChanged);
ColumnComboBox.SelectionChangeCommitted += new System.EventHandler(ComboStartEditing);
}
private void ComboStartEditing(object sender, EventArgs e)
{
_isEditing = true;
base.ColumnStartedEditing((Control) sender);
}
private void ComboIndexChanged(object sender, EventArgs e)
{
_valueChanging(_rowNum , ColumnComboBox.Text);
} private void ComboMadeCurrent(object sender, EventArgs e)
{
//_isEditing = true;
}
private void LeaveComboBox(object sender, EventArgs e)
{
if(_isEditing)
{
SetColumnValueAtRow(_source, _rowNum, ColumnComboBox.Text);
_isEditing = false;
Invalidate();
}
ColumnComboBox.Hide();
} protected override void Edit(System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
{
base.Edit(source,rowNum, bounds, readOnly, instantText , cellIsVisible); _rowNum = rowNum;
_source = source;
ColumnComboBox.Parent = this.TextBox.Parent;
ColumnComboBox.Location = this.TextBox.Location;
ColumnComboBox.Size = new Size(this.TextBox.Size.Width, ColumnComboBox.Size.Height);
ColumnComboBox.SelectedIndexChanged -= new System.EventHandler(ComboIndexChanged);
ColumnComboBox.Text = this.TextBox.Text;
ColumnComboBox.SelectedIndexChanged += new System.EventHandler(ComboIndexChanged); this.TextBox.Visible = false;
ColumnComboBox.Visible = true;
ColumnComboBox.BringToFront();
ColumnComboBox.Focus();
} protected override bool Commit(System.Windows.Forms.CurrencyManager dataSource, int rowNum)
{
if(_isEditing)
{
_isEditing = false;
SetColumnValueAtRow(dataSource, rowNum, ColumnComboBox.Text);
}
return true;
}
} public class NoKeyUpCombo : ComboBox
{
const int WM_KEYUP = 0x101;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if(m.Msg == WM_KEYUP)
{
//ignore keyup to avoid problem with tabbing & dropdownlist;
return;
}
base.WndProc(ref m);
}
}
我QQ 24915898 可以常联系
DataRowView myDataRowView =(DataRowView)source.List[rowNum];
string temp_hasChild=myDataRowView.Row["haschild"].ToString();
string temp_Extended=myDataRowView.Row["extended"].ToString();
结贴