using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
object[] row0 = { "Swamp0", "Swamper", "Swampy", "Swamp", "1000" };
object[] row1 = { "TEST1", "XXXX", "YYYY", "ZZZZ", "2000" };
object[] row2 = { "TEST2", "RRRR", "UUUUUUUUUUUUUUUUUUUUUUUUUUUUU", "3000" };
object[] row3 = { "THIS IS ONLY A TEST", "YYYYYYYYYY", "OOOOOOOOOOOOOOOOOOOOO", "4000" };
object[] row4 = { "TESTER", "Dog", "Man", "Beatles", "5000" };
object[] row5 = { "Another Row For Test Here", "Master of Disaster", "GgGgggggggggggg", "88888", "6000" };
dataGridView1.Rows.Add(row0);
dataGridView1.Rows.Add(row1);
dataGridView1.Rows.Add(row2);
dataGridView1.Rows.Add(row3);
dataGridView1.Rows.Add(row4);
dataGridView1.Rows.Add(row5);
dataGridView1.AllowUserToOrderColumns = true;
FixedColumns
= new Dictionary
<DataGridViewColumn,
int>(); NumberOfColumnsAllowedToOrder = dataGridView1.ColumnCount;
ReorderColumns
= new Dictionary
<DataGridViewColumn,
int>(); foreach (DataGridViewColumn column in dataGridView1.Columns)
{
ReorderColumns.Add(column, column.Index);
}
}
public int NumberOfColumnsAllowedToOrder { get; set; }
public Dictionary<DataGridViewColumn, int> ReorderColumns { get; set; }
public Dictionary<DataGridViewColumn, int> FixedColumns { get; set; }
private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Right) return;
var hitTest = dataGridView1.HitTest(e.X, e.Y);
var rowIndex = hitTest.RowIndex;
if (rowIndex != -1) return;
dataGridView1.ContextMenuStrip = contextMenuStrip1;
dataGridView1
.ContextMenuStrip.Show(dataGridView1,
new Point
(e
.X, e
.Y)); }
private void addColumn_Click(object sender, EventArgs e)
{
var columnsCount = dataGridView1.ColumnCount + 1;
var column
= new DataGridViewTextBoxColumn
{ Name
= "Column" + columnsCount
}; dataGridView1.Columns.Add(column);
}
private void dataGridView1_ColumnAdded(object sender, DataGridViewColumnEventArgs e)
{
FixedColumns.Add(e.Column, e.Column.Index);
}
private void dataGridView1_MouseUp(object sender, MouseEventArgs e)
{
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
if (!ReorderColumns.ContainsKey(column)) continue;
if (column.DisplayIndex <= NumberOfColumnsAllowedToOrder) continue;
int resetIndex;
ReorderColumns.TryGetValue(column, out resetIndex);
column.DisplayIndex = resetIndex;
}
foreach (var fixedLocationsColumn in FixedColumns)
{
fixedLocationsColumn.Key.DisplayIndex = fixedLocationsColumn.Value;
fixedLocationsColumn.Key.Frozen = true;
}
}
}
}