.netWinform中DataGrid是否可以多选,请教
解决方案 »
- 怎么用相对路径的url表示本地文件
- clickonce 清单签名证书延长有效期 的参数设置问题
- LABEL显示 隐藏 闪烁
- 请问怎么计算时间阿?
- 关于自定义控件(新手问题)
- 我发送邮件时,发件人写的是:<123>[email protected],但对方收到邮件后怎么总显示发件人为:“<”呢,而不显示:123?
- 我是新人请教C#开发小型OA系统。第一步如何学习
- TreeView 子菜单问题?
- 购物车
- 读取文本中的字符时,如果有有中英文,怎样把中英文分别读出来
- ■■现金100元奖励!求win2003server登陆窗口图片修改方法!!
- winform 下的datagrid 产生的莫名其妙的错误! 谢谢
for (int i = 0; i < 3; i++)
{
datagrid.Select(i);
}
/// MultSelectGrid 的摘要说明。
/// </summary>
public class MultSelectGrid : System.Windows.Forms.DataGrid
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null; private ArrayList m=new ArrayList(); public MultSelectGrid()
{
// 该调用是 Windows.Forms 窗体设计器所必需的。
InitializeComponent(); // TODO: 在 InitComponent 调用后添加任何初始化
} /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if( components != null )
components.Dispose();
}
base.Dispose( disposing );
} #region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion protected override void OnPaint(PaintEventArgs pe)
{
// TODO: 在此添加自定义绘画代码 // 调用基类 OnPaint
base.OnPaint(pe);
}
public int[] MultiSelectedIndexs
{
get
{
return (int[])m.ToArray(typeof(int));
}
} protected override void OnMouseDown(MouseEventArgs e)
{
if(e.Button==System.Windows.Forms.MouseButtons.Left)
{
DataGrid.HitTestInfo hit=HitTest(e.X,e.Y);
if(this.HitDataGrid(hit))
{
try
{
base.OnMouseDown(e);
}
catch(Exception ex)
{
MessageHelper.ShowMessage(ex.Message);
}
}
}
else
base.OnMouseDown(e); }
private bool HitDataGrid(HitTestInfo hit)
{
try
{
switch(DataGrid.ModifierKeys)
{
case Keys.Control:
if(hit.Row>-1)
{
if(m.IndexOf(hit.Row)>-1)
{
m.Remove(hit.Row);
this.UnSelect(hit.Row);
}
else
{
m.Add(hit.Row);
this.Select(hit.Row);
}
}
return false;
case Keys.Shift:
if(hit.Row>-1)
{
foreach(int i in m)
{
this.UnSelect(i);
}
m.Clear();
int low;
int hight;
if(hit.Row>this.CurrentRowIndex)
{
hight=hit.Row;
low=this.CurrentRowIndex;
}
else
{
hight=this.CurrentRowIndex;
low=hit.Row;
}
for(int i=low;i<=hight;i++)
{
m.Add(i);
this.Select(i);
}
}
return false;
default:
foreach(int i in m)
{
this.UnSelect(i);
}
m.Clear();
if(hit.Type==DataGrid.HitTestType.RowHeader)
{
m.Add(hit.Row);
}
return true;
}
}
catch(System.Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.ToString());
}
return true;
}
// protected override void OnMouseMove(MouseEventArgs e)
// {
// if(e.Button==System.Windows.Forms.MouseButtons.Left)
// {
// DataGrid.HitTestInfo hit=HitTest(e.X,e.Y);
// if(this.HitDataGrid(hit))
// {
// base.OnMouseMove(e);
// }
// }
// }
// protected override void OnMouseHover(EventArgs e)
// {
// base.OnMouseHover (e);
// }
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp (e);
} protected override bool ProcessCmdKey(ref Message msg,Keys keyData)
{
// if ( keyData==Keys.Delete )
// {
// if(MessageHelper.ShowMessageResult("您确实要执行此操作吗?") == DialogResult.No)
// {
//
// return true;
// }
// else
// {
// return base.ProcessCmdKey(ref msg,keyData);
// }
// }
// else
// return base.ProcessCmdKey(ref msg,keyData); switch(keyData)
{
case Keys.Delete:
if(MessageHelper.ShowMessageResult("您确实要执行此操作吗?") == DialogResult.No)
{
return true;
}
else
{
return base.ProcessCmdKey(ref msg,keyData);
}
//break;
case Keys.Enter: SendKeys.Send("{Tab}");
return true;
}
return base.ProcessCmdKey(ref msg,keyData); } }