using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FromChuLi
{
public partial class Form1 : Form
{
FromCellList fcl = new FromCellList();
public Form1()
{
InitializeComponent();
DataTable dt = new DataTable();
dt.Columns.Add("col1", typeof(int));
dt.Columns.Add("col2", typeof(int));
dt.Columns.Add("col3", typeof(int));
dt.Rows.Add(1, 2, 3);
dt.Rows.Add(4, 5, 6);
dt.Rows.Add(7, 8, 9);
dataGridView1.DataSource = FromCellList.DataTableToFromCellList(dt).DeleteColumn(1).ToDataTable();
dataGridView1.DataSource = dt;
}
private void DataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
zToolStripMenuItem.Text = e.RowIndex.ToString() + "行" + e.ColumnIndex.ToString() + "列";
if (e.RowIndex == -1)//第一行,head 顶部
{
//弹出操作菜单
DataGridView dgv = sender as DataGridView;
ContextMenuStrip context = new ContextMenuStrip();
context.Size = new System.Drawing.Size(153, 300);
#region 删除列
ToolStripMenuItem contextItem = new ToolStripMenuItem();
contextItem.Size = new System.Drawing.Size(152, 22);
contextItem.Text = "删除列";
contextItem.Click += new System.EventHandler(
(sender2, e2) =>
{
dataGridView1.Columns.RemoveAt(e.ColumnIndex);
fcl.DeleteColumn(e.ColumnIndex);
}
);
#endregion
#region int 从小到大 排序
ToolStripMenuItem contextItem2 = new ToolStripMenuItem();
contextItem2.Size = new System.Drawing.Size(152, 90);
contextItem2.Text = "int 从小到大 排序";
contextItem2.Click += new System.EventHandler(
(sender2, e2) =>
{
fcl.SortInt(e.ColumnIndex);
dataGridView1.DataSource = fcl.ToDataTable();
}
);
#endregion
#region 两个字名字之间加两个空格
ToolStripMenuItem contextItem3 = new ToolStripMenuItem();
contextItem3.Size = new System.Drawing.Size(152, 120);
contextItem3.Text = "两个字名字之间加两个空格";
contextItem3.Click += new System.EventHandler(
(sender2, e2) =>
{
FromCellList fl = fcl.GetColumn(e.ColumnIndex);
for (int i = 0; i < fl.list.Count; i++)
{
List<object> ziList = fl.list[i].lines;
for (int j = ziList.Count - 1; j > -1; j--)
{
if (j == e.ColumnIndex && i!=0) //i!=0 表示标题 不参与
{
string item = ziList[j].ToString();
if (item.Length == 2)
{
item = item.Insert(1, " ");
}
ziList[j] = item;
}
}
}
fcl = fl;
dataGridView1.DataSource = fcl.ToDataTable();
}
);
#endregion
#region 名字之间的空格去掉
ToolStripMenuItem contextItem4 = new ToolStripMenuItem();
contextItem4.Size = new System.Drawing.Size(152, 150);
contextItem4.Text = "名字之间的空格去掉";
contextItem4.Click += new System.EventHandler(
(sender2, e2) =>
{
FromCellList fl = fcl.GetColumn(e.ColumnIndex);
for (int i = 0; i < fl.list.Count; i++)
{
List<object> ziList = fl.list[i].lines;
for (int j = ziList.Count - 1; j > -1; j--)
{
if (j == e.ColumnIndex && i != 0) //i!=0 表示标题 不参与
{
string item = Convert.ToString(ziList[j]);//ziList[j] type =object
item = item.Replace(" ","").Trim();
ziList[j] =item;
}
}
}
fcl = fl;
dataGridView1.DataSource = fcl.ToDataTable();
});
#endregion
#region int 从大到小排序
ToolStripMenuItem contextItem5 = new ToolStripMenuItem();
contextItem5.Size = new System.Drawing.Size(152, 90);
contextItem5.Text = "int 从大到小排序";
contextItem5.Click += new System.EventHandler(
(sender2, e2) =>
{
fcl.SortIntDescending(e.ColumnIndex);
dataGridView1.DataSource = fcl.ToDataTable();
}
);
#endregion
context.Items.Add(contextItem);
context.Items.Add(contextItem2);
context.Items.Add(contextItem3);
context.Items.Add(contextItem4);
context.Items.Add(contextItem5);
context.Show(MousePosition.X, MousePosition.Y);
countToolStripMenuItem.Text = "Count:" + fcl.list.Count;
}
}
}
private void 从剪贴板创建ToolStripMenuItem_Click(object sender, EventArgs e)
{
IDataObject data = Clipboard.GetDataObject();
var has = data.GetDataPresent(typeof(string));
var length = Clipboard.GetDataObject().GetFormats().Length != 0;
if (has && length)
{
string bit = (string)data.GetData(typeof(string));
var arr = bit.Split(new string[] { "\n" }, System.StringSplitOptions.None);
if (arr.Length > 1)
{
for (int i = 0; i < arr.Length; i++)
{
var eleArr = arr[i].Split(new string[] { "\t" }, System.StringSplitOptions.None);
List<object> listObj = new List<object>(eleArr);
if (eleArr.Length > 1)
{
Lines line = new Lines(i, listObj);
fcl.Add(line);
}
}
}
dataGridView1.DataSource = fcl.ToDataTable();
}
countToolStripMenuItem.Text = "Count:" + fcl.list.Count;
}
}
public class Lines
{
public int line;
public List<object> lines = new List<object>();
public int Count
{
get { return lines.Count; }
}
public Lines(int line, List<object> lines)
{
this.line = line;
this.lines = lines;
}
public Lines(Lines lines)
{
this.line = lines.line;
this.lines = lines.lines;
}
}
public class FromCellList
{
public List<Lines> list = new List<Lines>();
public void Add(Lines line)
{
list.Add(line);
}
public static FromCellList DataTableToFromCellList(DataTable dt)
{
FromCellList fcl = new FromCellList();
var objList = new List<object>();
foreach (DataColumn dc in dt.Columns)
{
objList.Add(dc.ColumnName);
}
Lines lines0 =new Lines(0, objList);
fcl.Add(lines0);
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow dataRow = dt.Rows[i];
var lines = new Lines(i, dataRow.ItemArray.ToList());
fcl.Add(lines);
for (int j = 0; j < dt.Columns.Count;j++)
{
string strName = dt.Rows[i][j].ToString();
// Console.WriteLine(strName);
}
}
return fcl;
}
/// <summary>
/// 获取指定列的内容
/// </summary>
/// <param name="columnIndex">列的下标</param>
/// <returns></returns>
public FromCellList GetColumn(int columnIndex)
{
var fromCellList = new FromCellList ();
for (int i = 0; i < list.Count; i++)
{
var lines = list[i];
for (int j = 0; j < lines.Count; j++)
{
if (j == columnIndex)
{
fromCellList.Add(lines);
}
}
}
return fromCellList;
}
public void SortInt(int columnIndex)
{
//第一行 标题 不参与 排序
Lines lines = new Lines(0, list[0].lines);
list.RemoveAt(0);
list.Sort((left, right) =>
{
var l = (Lines)left;
var r = (Lines)right;
if (l == null || r == null)
return -1;
//首先比较第一个字段.
var firstL = -999;
var firstR = -999;
int.TryParse(l.lines[columnIndex] as string, out firstL);
int.TryParse(r.lines[columnIndex] as string, out firstR);
if (firstL > firstR)
{
return 1;
}
else if (firstL == firstR)//相等则比较第2个字段.
{
return 0;
}
else
{
return -1;
}
});
//第一行 标题 不参与 排序
list.Insert(0, lines);
}
/// <summary>
/// 从大到小
/// </summary>
/// <param name="columnIndex"></param>
/// <returns></returns>
public void SortIntDescending(int columnIndex)
{
//第一行 标题 不参与 排序
Lines lines = new Lines(0, list[0].lines);
list.RemoveAt(0);
list.Sort((left, right) =>
{
var l = (Lines)left;
var r = (Lines)right;
if (l == null || r == null)
return -1;
//首先比较第一个字段.
var firstL = -999;
var firstR = -999;
int.TryParse(l.lines[columnIndex] as string, out firstL);
int.TryParse(r.lines[columnIndex] as string, out firstR);
if (firstL > firstR)
{
return -1;
}
else if (firstL == firstR)//相等则比较第2个字段.
{
return 0;
}
else
{
return 1;
}
});
//第一行 标题 不参与 排序
list.Insert(0,lines);
}
public DataTable ToDataTable()
{
DataTable dt = new DataTable();
for (int i = 0; i < list.Count; i++)
{
var lines = list[i];
var row = new List<string>();
for (int j = 0; j < lines.Count; j++)
{
string contant = "";
if (lines.lines[j].GetType() == typeof(string))
{
contant = Convert.ToString(lines.lines[j]);
}
else if (lines.lines[j].GetType() == typeof(int))
{
contant= lines.lines[j].ToString();
}
// Console.WriteLine(lines.lines[j].GetType()+"=type,vallue="+ contant);
//result += ("行号:" + lines.line + "neirong=" + lines.lines[j]);
if (i == 0)
{
dt.Columns.Add(contant, typeof(string));
}
if (i > 0)
{
row.Add(contant);
}
}
if (i > 0)
{
dt.Rows.Add(row.ToArray());
}
}
return dt;
}
public override string ToString()
{
string result="";
string str = "";
for (int i = 0; i < list.Count; i++)
{
var lines = list[i];
str = "";
for (int j = 0; j < lines.Count; j++)
{
if (j > 0)
{
str += "\t";
}
str += lines.lines[j].ToString();
}
result += str +"\n";
}
return result;
}
public FromCellList DeleteColumn(int columnIndex)
{
for (int i = 0; i < list.Count; i++)
{
List<object> ziList = list[i].lines;
for (int j = ziList.Count-1; j >-1; j--)
{
if (j == columnIndex)
{
string item = ziList[j].ToString();
// Console.WriteLine("Delete:"+item+"\t"+"j="+j);
ziList.RemoveAt(j);
}
}
}
return this;
}
}
}