关于将其他控件加入datagrid的问题,一个问题五十分 1.在单元格中添加linklabel就和添加文字一样,帮它当作文字一样处理就可了2.为datagrid每行添加一个id,当点后,通过id,取出想要传递的所有的数据,放到新窗口就可了啊! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.在单元格中添加linklabel就和添加文字一样,帮它当作文字一样处理就可了2.为datagrid每行添加一个id,当点后,通过id,取出想要传递的所有的数据,放到新窗口就可了啊!有道理 LinkLabel类型的DataColumnStyle完全可以,需要从DataColumnStyle重载,并引发Click事件,然后在程序中处理该时间。建议参考文档:http://www.microsoft.com/china/community/Column/Henry.mspx 1.在单元格中添加linklabel就和添加文字一样,帮它当作文字一样处理就可了2.为datagrid每行添加一个id,当点后,通过id,取出想要传递的所有的数据,放到新窗口就可了啊!-------------------------------------------------------------------------1.我已经添加成功了,但是需要点一下它所在的单元格才能显示出来,我希望可以直接看到2.怎么在它的click事件里取得那个id LinkLabel类型的DataColumnStyle完全可以,需要从DataColumnStyle重载,并引发Click事件,然后在程序中处理该时间。-------------------------------------这个我知道,我想知道的是怎么在它的click事件里取道关于它所在行的信息。 private void DGUser_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { if(e.Item.ItemIndex < 0) return; CheckBox ChkBoxSign = new CheckBox(); ChkBoxSign = (CheckBox)e.Item.Cells[4].FindControl("sign"); if(e.Item.Cells[6].Text == "1") { ChkBoxSign.Checked=true; } else { ChkBoxSign.Checked=false; } ChkBoxSign.Enabled=false; } 是在webform中的吧那么你不需要单独添加一个linkelabel只要在datagrid控件中单吉右键,选择属性生成器->列->选择按扭列->添加添加好之后在下面右个按扭类型,选择linkbutton即可 wish u good luck Greatsft 不好意思没说清楚,是在winform里面,不然也不需要这么麻烦了 using System;using System.Drawing;using System.Collections;using System.Data;using System.Windows.Forms;namespace LongWin.UI.WinForm.Controls.ControlBase{ /// <summary> /// DataGridComboBoxColumn 的摘要说明:继承自DataGridColumnStyle,派生的类中,必须重写:Abort、Commit、Edit 和 Paint(两次) /// 有关注释选自帮助 /// 参考帮助文档:承载DateTimePicker 控件示例 /// 位置:ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemWindowsFormsDataGridColumnStyleClassTopic.htm /// </summary> public class DataGridComboBoxColumn:DataGridColumnStyle { private ComboBox pComboBox=new ComboBox(); private bool isEditing; private string valueMember=""; private string displayMember=""; DataTable _tableSource ; /// <summary> /// 构造方法 /// </summary> /// <param name="dt"></param> public DataGridComboBoxColumn():base() { pComboBox.Visible=false; } /// <summary> /// 加载数据,参数:数据表 /// </summary> /// <param name="dt"></param> public void BindData(object dataSource) { BindData(dataSource,displayMember,valueMember); } /// <summary> /// 加载数据,参数:数据表、显示字段名 /// </summary> /// <param name="dt"></param> /// <param name="sDisplayMember"></param> public void BindData(object dataSource,string sDisplayMember) { BindData(dataSource,sDisplayMember,sDisplayMember); } string defaultFilter=string.Empty; /// <summary> /// 加载数据,参数:数据表、显示字段名、值字段名 /// </summary> /// <param name="dt"></param> /// <param name="sDisplayMember"></param> /// <param name="sValueMember"></param> public void BindData(object dataSource,string sDisplayMember,string sValueMember) { try { if(dataSource is DataTable) { _tableSource=dataSource as DataTable; } else if(dataSource is DataSet) { DataSet ds=dataSource as DataSet; _tableSource=ds.Tables[0]; } else if(dataSource is DataView) { DataView dv=dataSource as DataView; defaultFilter=dv.RowFilter; //记录默认筛选条件 _tableSource=dv.Table; } if(sDisplayMember.Trim()=="") { throw new Exception("existingDipplay 参数不能为空!"); } else { if(sValueMember.Trim()=="") sValueMember=sDisplayMember; this.pComboBox.DropDownStyle=ComboBoxStyle.DropDownList; this.pComboBox.DataSource = dataSource ; this.pComboBox.DisplayMember = this.DisplayMember ; this.pComboBox.ValueMember = this.ValueMember ; } } catch(Exception ex) { throw ex; } } //值对应的数据字段名 public string ValueMember { get{ return valueMember;} set{valueMember=value;} } //显示对应的数据字段名 public string DisplayMember { get{return displayMember;} set{displayMember=value;} } /// <summary> /// 在派生类中被重写时,将启动一个请求来中断编辑过程 /// </summary> /// <param name="rowNum"></param> protected override void Abort(int rowNum) { isEditing = false; pComboBox.GotFocus-= new EventHandler(pComboBox_GotFocus); Invalidate(); } public event EventHandlerComboBoxColummDataChanging DataChanging; /// <summary> /// 在派生类中被重写时,将启动一个请求来完成编辑过程 /// </summary> /// <param name="dataSource"></param> /// <param name="rowNum"></param> /// <returns></returns> protected override bool Commit(CurrencyManager dataSource, int rowNum) { pComboBox.Bounds = Rectangle.Empty; if (!isEditing) return true; isEditing = false; try { try { if(this.DataChanging!=null) { this.DataChanging(this.pComboBox.SelectedValue); } } catch(Exception er) { MessageBox.Show(er.Message); return false; } SetColumnValueAtRow(dataSource, rowNum, this.pComboBox.SelectedValue ); } catch (Exception) { Abort(rowNum); return false; } Invalidate(); return true; } /// <summary> /// 准备单元格以便编辑值 /// </summary> /// <param name="source"></param> /// <param name="rowNum"></param> /// <param name="bounds"></param> /// <param name="readOnly"></param> /// <param name="instantText"></param> /// <param name="cellIsVisible"></param> protected override void Edit(CurrencyManager source, int rowNum, Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible) { object sValue; if(GetColumnValueAtRow(source, rowNum) is System.DBNull) { sValue=""; } else { sValue = GetColumnValueAtRow(source, rowNum) ; } if (cellIsVisible && !this.ReadOnly) { pComboBox.Bounds = new Rectangle(bounds.X + 1, bounds.Y + 1, bounds.Width - 2, bounds.Height - 2); pComboBox.SelectedValue = sValue ; pComboBox.Visible = true; pComboBox.GotFocus+=new EventHandler(pComboBox_GotFocus); } else { pComboBox.Visible = false; } if (pComboBox.Visible) DataGridTableStyle.DataGrid.Invalidate(bounds); } /// <summary> /// 获取指定值的宽度和高度 /// </summary> /// <param name="g"></param> /// <param name="value"></param> /// <returns></returns> protected override Size GetPreferredSize(Graphics g, object value) { return new Size(100, pComboBox.PreferredHeight + 2); } /// <summary> /// 将获取一行的最小高度 /// </summary> /// <returns></returns> protected override int GetMinimumHeight() { return pComboBox.PreferredHeight + 2; } /// <summary> /// 获取自动调整列的大小所用的高度 /// </summary> /// <param name="g"></param> /// <param name="value"></param> /// <returns></returns> protected override int GetPreferredHeight(Graphics g, object value) { return pComboBox.PreferredHeight + 2; } /// <summary> /// 绘制列 /// </summary> /// <param name="g"></param> /// <param name="bounds"></param> /// <param name="source"></param> /// <param name="rowNum"></param> protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum) { Paint(g, bounds, source, rowNum, false); } protected override void Paint(Graphics g,Rectangle bounds,CurrencyManager source, int rowNum,bool alignToRight) { Paint(g,bounds, source, rowNum, Brushes.Red, Brushes.Blue, alignToRight); } protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush,bool alignToRight) { object selectedValue =GetColumnValueAtRow(source, rowNum) ; if(selectedValue is System.DBNull) { selectedValue = ""; } else { if(selectedValue is System.Boolean ) selectedValue = Convert.ToInt32(selectedValue).ToString(); string filter=string.Format("{0}='{1}'" , this.ValueMember , selectedValue); if(this._tableSource.Columns[this.valueMember].DataType==typeof(int) || this._tableSource.Columns[this.valueMember].DataType==typeof(short)) { if(selectedValue.ToString().Length==0) selectedValue=0; filter=string.Format("{0}={1}" , this.ValueMember , selectedValue); } filter+= ((this.defaultFilter.Length>0) ? " And " + this.defaultFilter : ""); DataRow[] dr = _tableSource.Select(filter); if(dr != null && dr.Length ==1) selectedValue = dr[0][this.DisplayMember].ToString() ; else selectedValue=string.Empty; } int rows=Convert.ToInt32(bounds.Height/this.FontHeight); if(rows==0) { rows=1; } int dec=Convert.ToInt32((bounds.Height-this.FontHeight*rows)/2); if(dec<0) { dec=0; } Rectangle rect = new Rectangle(bounds.X,bounds.Y+dec,bounds.Width,bounds.Height-dec*2); g.FillRectangle(backBrush,bounds); rect.Offset(0, 2); rect.Height -= 2; g.DrawString(selectedValue.ToString() ,this.DataGridTableStyle.DataGrid.Font, foreBrush,rect); } /// <summary> /// 设置列的 System.Windows.Forms.DataGrid /// </summary> /// <param name="value"></param> protected override void SetDataGridInColumn(DataGrid value) { base.SetDataGridInColumn(value); if (pComboBox.Parent != null) { pComboBox.Parent.Controls.Remove (pComboBox); } if (value != null) { value.Controls.Add(pComboBox); } } private void pComboBox_GotFocus(object sender, EventArgs e) { this.isEditing = true; base.ColumnStartedEditing(pComboBox); } } public delegate void EventHandlerComboBoxColummDataChanging(object newValue);} 保存不进去 引用C++的dll,要怎么改啊 我们对软件进行了加密,用英语怎么说?谢谢。 wpf 调用SetCapture 又正则卡壳了求帮助 C#连接数据库的问题 各位有没有比较快速的把数据库数据变化立即刷新到网页上的方案? <1秒 字符转时间 怎样获得一个access数据库中所有的表格名称。 微软亚洲亚洲研究院的一道题。 求C#的 一个小写转人民币写的函数!!!!!!!!!!! 广州的朋友注意了 公布一个骗子公司
2.为datagrid每行添加一个id,当点后,通过id,取出想要传递的所有的数据,放到新窗口就可了啊!有道理
建议参考文档:http://www.microsoft.com/china/community/Column/Henry.mspx
2.为datagrid每行添加一个id,当点后,通过id,取出想要传递的所有的数据,放到新窗口就可了啊!
-------------------------------------------------------------------------
1.我已经添加成功了,但是需要点一下它所在的单元格才能显示出来,我希望可以直接看到
2.怎么在它的click事件里取得那个id
-------------------------------------
这个我知道,我想知道的是怎么在它的click事件里取道关于它所在行的信息。
{
if(e.Item.ItemIndex < 0)
return;
CheckBox ChkBoxSign = new CheckBox();
ChkBoxSign = (CheckBox)e.Item.Cells[4].FindControl("sign");
if(e.Item.Cells[6].Text == "1")
{
ChkBoxSign.Checked=true;
}
else
{
ChkBoxSign.Checked=false;
}
ChkBoxSign.Enabled=false;
}
那么你不需要单独添加一个linkelabel
只要在datagrid控件中单吉右键,选择属性生成器->列->选择按扭列->添加
添加好之后在下面右个按扭类型,选择linkbutton即可 wish u good luck
Greatsft
using System.Drawing;
using System.Collections;
using System.Data;
using System.Windows.Forms;namespace LongWin.UI.WinForm.Controls.ControlBase
{
/// <summary>
/// DataGridComboBoxColumn 的摘要说明:继承自DataGridColumnStyle,派生的类中,必须重写:Abort、Commit、Edit 和 Paint(两次)
/// 有关注释选自帮助
/// 参考帮助文档:承载DateTimePicker 控件示例
/// 位置:ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemWindowsFormsDataGridColumnStyleClassTopic.htm
/// </summary>
public class DataGridComboBoxColumn:DataGridColumnStyle
{
private ComboBox pComboBox=new ComboBox();
private bool isEditing;
private string valueMember="";
private string displayMember="";
DataTable _tableSource ; /// <summary>
/// 构造方法
/// </summary>
/// <param name="dt"></param>
public DataGridComboBoxColumn():base()
{
pComboBox.Visible=false;
} /// <summary>
/// 加载数据,参数:数据表
/// </summary>
/// <param name="dt"></param>
public void BindData(object dataSource)
{
BindData(dataSource,displayMember,valueMember);
} /// <summary>
/// 加载数据,参数:数据表、显示字段名
/// </summary>
/// <param name="dt"></param>
/// <param name="sDisplayMember"></param>
public void BindData(object dataSource,string sDisplayMember)
{
BindData(dataSource,sDisplayMember,sDisplayMember);
} string defaultFilter=string.Empty;
/// <summary>
/// 加载数据,参数:数据表、显示字段名、值字段名
/// </summary>
/// <param name="dt"></param>
/// <param name="sDisplayMember"></param>
/// <param name="sValueMember"></param>
public void BindData(object dataSource,string sDisplayMember,string sValueMember)
{
try
{
if(dataSource is DataTable)
{
_tableSource=dataSource as DataTable;
}
else if(dataSource is DataSet)
{
DataSet ds=dataSource as DataSet;
_tableSource=ds.Tables[0];
}
else if(dataSource is DataView)
{
DataView dv=dataSource as DataView;
defaultFilter=dv.RowFilter; //记录默认筛选条件 _tableSource=dv.Table;
} if(sDisplayMember.Trim()=="")
{
throw new Exception("existingDipplay 参数不能为空!");
}
else
{
if(sValueMember.Trim()=="")
sValueMember=sDisplayMember;
this.pComboBox.DropDownStyle=ComboBoxStyle.DropDownList;
this.pComboBox.DataSource = dataSource ;
this.pComboBox.DisplayMember = this.DisplayMember ;
this.pComboBox.ValueMember = this.ValueMember ;
}
}
catch(Exception ex)
{
throw ex;
}
} //值对应的数据字段名
public string ValueMember
{
get{ return valueMember;}
set{valueMember=value;}
} //显示对应的数据字段名
public string DisplayMember
{
get{return displayMember;}
set{displayMember=value;}
} /// <summary>
/// 在派生类中被重写时,将启动一个请求来中断编辑过程
/// </summary>
/// <param name="rowNum"></param>
protected override void Abort(int rowNum)
{
isEditing = false;
pComboBox.GotFocus-= new EventHandler(pComboBox_GotFocus);
Invalidate();
}
/// <summary>
/// 在派生类中被重写时,将启动一个请求来完成编辑过程
/// </summary>
/// <param name="dataSource"></param>
/// <param name="rowNum"></param>
/// <returns></returns>
protected override bool Commit(CurrencyManager dataSource, int rowNum)
{
pComboBox.Bounds = Rectangle.Empty;
if (!isEditing)
return true; isEditing = false; try
{
try
{
if(this.DataChanging!=null)
{
this.DataChanging(this.pComboBox.SelectedValue);
}
}
catch(Exception er)
{
MessageBox.Show(er.Message);
return false;
}
SetColumnValueAtRow(dataSource, rowNum, this.pComboBox.SelectedValue );
}
catch (Exception)
{
Abort(rowNum);
return false;
} Invalidate();
return true;
} /// <summary>
/// 准备单元格以便编辑值
/// </summary>
/// <param name="source"></param>
/// <param name="rowNum"></param>
/// <param name="bounds"></param>
/// <param name="readOnly"></param>
/// <param name="instantText"></param>
/// <param name="cellIsVisible"></param>
protected override void Edit(CurrencyManager source, int rowNum, Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
{
object sValue; if(GetColumnValueAtRow(source, rowNum) is System.DBNull)
{
sValue="";
}
else
{
sValue = GetColumnValueAtRow(source, rowNum) ;
} if (cellIsVisible && !this.ReadOnly)
{
pComboBox.Bounds = new Rectangle(bounds.X + 1, bounds.Y + 1, bounds.Width - 2, bounds.Height - 2);
pComboBox.SelectedValue = sValue ;
pComboBox.Visible = true;
pComboBox.GotFocus+=new EventHandler(pComboBox_GotFocus);
}
else
{
pComboBox.Visible = false;
} if (pComboBox.Visible)
DataGridTableStyle.DataGrid.Invalidate(bounds);
} /// <summary>
/// 获取指定值的宽度和高度
/// </summary>
/// <param name="g"></param>
/// <param name="value"></param>
/// <returns></returns>
protected override Size GetPreferredSize(Graphics g, object value)
{
return new Size(100, pComboBox.PreferredHeight + 2);
} /// <summary>
/// 将获取一行的最小高度
/// </summary>
/// <returns></returns>
protected override int GetMinimumHeight()
{
return pComboBox.PreferredHeight + 2;
} /// <summary>
/// 获取自动调整列的大小所用的高度
/// </summary>
/// <param name="g"></param>
/// <param name="value"></param>
/// <returns></returns>
protected override int GetPreferredHeight(Graphics g, object value)
{
return pComboBox.PreferredHeight + 2;
} /// <summary>
/// 绘制列
/// </summary>
/// <param name="g"></param>
/// <param name="bounds"></param>
/// <param name="source"></param>
/// <param name="rowNum"></param>
protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum)
{
Paint(g, bounds, source, rowNum, false);
} protected override void Paint(Graphics g,Rectangle bounds,CurrencyManager source, int rowNum,bool alignToRight)
{
Paint(g,bounds, source, rowNum, Brushes.Red, Brushes.Blue, alignToRight);
} protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush,bool alignToRight)
{
object selectedValue =GetColumnValueAtRow(source, rowNum) ;
if(selectedValue is System.DBNull)
{
selectedValue = "";
}
else
{
if(selectedValue is System.Boolean )
selectedValue = Convert.ToInt32(selectedValue).ToString(); string filter=string.Format("{0}='{1}'" , this.ValueMember , selectedValue);
if(this._tableSource.Columns[this.valueMember].DataType==typeof(int)
|| this._tableSource.Columns[this.valueMember].DataType==typeof(short))
{
if(selectedValue.ToString().Length==0)
selectedValue=0;
filter=string.Format("{0}={1}" , this.ValueMember , selectedValue);
} filter+= ((this.defaultFilter.Length>0) ? " And " + this.defaultFilter : ""); DataRow[] dr = _tableSource.Select(filter);
if(dr != null && dr.Length ==1)
selectedValue = dr[0][this.DisplayMember].ToString() ;
else
selectedValue=string.Empty;
} int rows=Convert.ToInt32(bounds.Height/this.FontHeight);
if(rows==0)
{
rows=1;
}
int dec=Convert.ToInt32((bounds.Height-this.FontHeight*rows)/2); if(dec<0)
{
dec=0;
} Rectangle rect = new Rectangle(bounds.X,bounds.Y+dec,bounds.Width,bounds.Height-dec*2); g.FillRectangle(backBrush,bounds);
rect.Offset(0, 2);
rect.Height -= 2;
g.DrawString(selectedValue.ToString() ,this.DataGridTableStyle.DataGrid.Font, foreBrush,rect);
} /// <summary>
/// 设置列的 System.Windows.Forms.DataGrid
/// </summary>
/// <param name="value"></param>
protected override void SetDataGridInColumn(DataGrid value)
{
base.SetDataGridInColumn(value);
if (pComboBox.Parent != null)
{
pComboBox.Parent.Controls.Remove
(pComboBox);
}
if (value != null)
{
value.Controls.Add(pComboBox);
}
} private void pComboBox_GotFocus(object sender, EventArgs e)
{
this.isEditing = true;
base.ColumnStartedEditing(pComboBox);
}
}
public delegate void EventHandlerComboBoxColummDataChanging(object newValue);
}