How Can I prevent DataGrid Sorting?

NewSun99 2003-11-11 06:47:28
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace MdiDemo
{
public class frmMain : System.Windows.Forms.Form
{
private System.ComponentModel.Container components = null;
private uDataGrid myDataGrid;
private DataSet myDataSet;

public frmMain()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码
private void InitializeComponent()
{
this.myDataGrid = new uDataGrid();
((System.ComponentModel.ISupportInitialize)(this.myDataGrid)).BeginInit();
this.SuspendLayout();
//
// myDataGrid
//
this.myDataGrid.AllowSorting = false;
this.myDataGrid.DataMember = "";
this.myDataGrid.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.myDataGrid.Location = new System.Drawing.Point(0, 0);
this.myDataGrid.Name = "myDataGrid";
this.myDataGrid.Size = new System.Drawing.Size(600, 416);
this.myDataGrid.TabIndex = 0;
this.myDataGrid.MouseUp += new System.Windows.Forms.MouseEventHandler(this.myDataGrid_MouseUp);
//
// frmMain
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(640, 437);
this.Controls.Add(this.myDataGrid);
this.Name = "frmMain";
this.Text = "frmMain";
this.Load += new System.EventHandler(this.frmMain_Load);
((System.ComponentModel.ISupportInitialize)(this.myDataGrid)).EndInit();
this.ResumeLayout(false);

}
#endregion
[STAThread]
static void Main()
{
Application.Run(new frmMain());
}
private void MakeDataSet()
{
myDataSet = new DataSet("myDataSet");
DataTable tCust = new DataTable("EastCoastSales");
DataColumn cCustID = new DataColumn("CustID", typeof(int));
DataColumn cCustName = new DataColumn("CustName");
tCust.Columns.Add(cCustID);
tCust.Columns.Add(cCustName);

myDataSet.Tables.Add(tCust);
DataRow newRow1;

for(int i = 1; i < 8; i++)
{
newRow1 = tCust.NewRow();
newRow1["custID"] = i;
tCust.Rows.Add(newRow1);
}
tCust.Rows[0]["custName"] = "custName1";
tCust.Rows[1]["custName"] = "custName2";
tCust.Rows[2]["custName"] = "custName3";
tCust.Rows[3]["custName"] = "custName4";
tCust.Rows[4]["custName"] = "custName5";
tCust.Rows[5]["custName"] = "custName6";
tCust.Rows[6]["custName"] = "custName7";
myDataGrid.DataSource = myDataSet.Tables["EastCoastSales"];

}

private void frmMain_Load(object sender, System.EventArgs e)
{
MakeDataSet();
myDataGrid.AllowRowMove = true;
}

private void myDataGrid_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(myDataGrid.RowHasMoved)
{
for(int i = 0,iCount = myDataSet.Tables["EastCoastSales"].Rows.Count;i < iCount ;i ++)
{
//myDataSet.Tables["EastCoastSales"].Rows[i]["custID"] = i + 1;
}
}
}
}

}
...全文
45 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dotnba 2003-11-12
  • 打赏
  • 举报
回复
protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
DataGrid.HitTestInfo hit = this.HitTest(e.X, e.Y);
if(IsMovingMouseDown)
{
if(CanBeMoved(hit.Type))
{
if(hit.Row != CurrentMouseRow)
{
EraseLine(iOldY);
CurrentMouseRow = hit.Row;
DrawLine(e.Y);
iOldY = e.Y;
}
}
}
}
base.OnMouseMove(e);
}

protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
DataGrid.HitTestInfo hit = this.HitTest(e.X, e.Y);
if(CanBeMoved(hit.Type))
{
MouseDownRow = hit.Row;
CurrentMouseRow = hit.Row;
IsMovingMouseDown = true;
}
}
base.OnMouseDown(e);
}

protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
DataGrid.HitTestInfo hit = this.HitTest(e.X, e.Y);
if(IsMovingMouseDown)
{
EraseLine(iOldY);
if(CanBeMoved(hit.Type))
{
MoveRowFromTo(MouseDownRow, CurrentMouseRow);
}
}
}
IsMovingMouseDown = false;
base.OnMouseUp(e);
IsRowMoved = false;
}
dashi 2003-11-11
  • 打赏
  • 举报
回复
up
NewSun99 2003-11-11
  • 打赏
  • 举报
回复
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections;
using System.Text;
using System.Data;

namespace MdiDemo
{
#region 自定义DataGrid
public class uDataGrid:System.Windows.Forms.DataGrid
{

public bool AllowRowMove = false;
private bool IsMovingMouseDown = false;
private bool IsRowMoved = false;
private int MouseDownRow;
private int CurrentMouseRow;
private int iOldY;
public bool RowHasMoved
{
get
{
return IsRowMoved;
}
}
#region 重写鼠标事件
protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
DataGrid.HitTestInfo hit = this.HitTest(e.X, e.Y);
if(CanBeMoved(hit.Type))
{
if(hit.Row != CurrentMouseRow)
{
if(IsMovingMouseDown)
{
EraseLine(iOldY);
}
CurrentMouseRow = hit.Row;
DrawLine(e.Y);
iOldY = e.Y;
IsMovingMouseDown = true;
}
}
}
base.OnMouseMove(e);
}

protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
DataGrid.HitTestInfo hit = this.HitTest(e.X, e.Y);
if(CanBeMoved(hit.Type))
{
MouseDownRow = hit.Row;
CurrentMouseRow = hit.Row;
IsMovingMouseDown = false;
}
}
base.OnMouseDown(e);
}

protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
if(AllowRowMove && IsMovingMouseDown)
{
EraseLine(iOldY);
MoveRowFromTo(MouseDownRow, CurrentMouseRow);
}
}
base.OnMouseUp(e);
IsRowMoved = false;
}
#endregion

#region 画线条
private void EraseLine(int row)
{
this.Refresh();
}
private void DrawLine(int row)
{
Graphics g = Graphics.FromHwnd(this.Handle);
Pen pen = new Pen(Color.Red, 2);
g.DrawLine(pen, 0, row, this.Size.Width , row);
pen.Dispose();
g.Dispose();
}
#endregion

#region 移动数据行时涉及的一些方法
private bool CanBeMoved(HitTestType HitType)
{
if(!AllowRowMove) return false;
switch(HitType)
{
case(System.Windows.Forms.DataGrid.HitTestType.Cell):
{
break;
}
case(System.Windows.Forms.DataGrid.HitTestType.Caption):
{
return false;
}
case(System.Windows.Forms.DataGrid.HitTestType.ColumnHeader):
{
return false;
}
case(System.Windows.Forms.DataGrid.HitTestType.ColumnResize):
{
return false;
}
case(System.Windows.Forms.DataGrid.HitTestType.ParentRows):
{
return false;
}
case(System.Windows.Forms.DataGrid.HitTestType.RowHeader):
{
return false;
}
case(System.Windows.Forms.DataGrid.HitTestType.RowResize):
{
return false;
}
case(System.Windows.Forms.DataGrid.HitTestType.None):
{
return false;
}
default:
{
break;
}
}
return true;
}
private void CopyRow(DataRow SourceRow, DataRow DestinationRow, int iColCount)
{
for(int i = 0; i < iColCount;i ++)
{
DestinationRow[i] = SourceRow[i];
}
}

private void MoveRowFromTo(int iRowFrom, int iRowTo)
{
if(iRowFrom < 0 || iRowTo < 0) return;
DataTable dt = GetDataTable();
if(dt == null) return;
//save the row to be deleted
DataRow dr = dt.NewRow();
CopyRow(dt.Rows[iRowFrom], dr, dt.Columns.Count);
//delete it
dt.Rows.RemoveAt(iRowFrom);
//insert the copy
dt.Rows.InsertAt(dr, iRowTo);
//accept the changes so they show up in the grid
dt.AcceptChanges();
IsRowMoved = true;
}
#endregion
#region 获取当前数据表
public DataTable GetDataTable()
{
BindingManagerBase bm = this.BindingContext[this.DataSource, this.DataMember];
if(bm.Count == 0) return null;
return ((DataRowView)bm.Current).Row.Table;
}
#endregion
}
#endregion 结束自定义DataGrid
}

110,555

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧