c# datagirdview操作的简单介绍

今天写了个小工具,用到了datagirdview,还挺好使,现将操作记下来,方便以后查找(我这脑子不记东西,没办法)。

首先添加datagirdview控件,修改控件名称为dgv。

1. 动态加datagridview列标题

//指定列数
dgv.ColumnCount = m_lstFeather.Count + 1;
for (int i = 0; i < dgv.ColumnCount; ++i)
{
   //指定列名
    dgv.Columns[i].Name = m_lstFeather[i];
    //按照指定的方式排序,这是为后面的实现点击标题可以排序做准备
    dgv.Columns[i].SortMode = DataGridViewColumnSortMode.Programmatic;
}

2. 添加数据
添加数据,我今天遇到的,可分为两种方式,一是手动添加,也就是datagirdview可编辑,直接往里输数据;二是从剪贴板通过热键Ctrl+c复制数据到datagirdview。
第一种方式,很简单,就是保证datagirdview的readonly数据为false就可以了。
第二种方式,稍稍麻烦一些。见下面的代码,其中,dgv_KeyDown是datagirdview的KeyDown事件的绑定回调函数。

private void dgv_KeyDown(object sender, KeyEventArgs e)
{
   //判断是否是ctrl+c的热键
    if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.V)
    {
      //是否是在datagirdview控件上触发的
         if (sender != null && sender.GetType() == typeof(DataGridView))
         {
            DataGirdViewCellPaste((DataGridView)sender);
         }
    }
}


public void DataGirdViewCellPaste(DataGridView p_Data)
{
    // 获取剪切板的内容
    string strPaste = Clipboard.GetText();
    if (string.IsNullOrEmpty(strPaste))
    {
          return;
    }
    //按行分割
    string[] strLines = strPaste.Split(new char[] { '\r', '\n'}, StringSplitOptions.RemoveEmptyEntries);
    foreach (string line in strLines)
    {
         // 再按分隔符,分割列数据
         string[] vals = line.Split(new char[]{'\t', ' ', ',', ',', ';', ';'}, StringSplitOptions.RemoveEmptyEntries);
         p_Data.Rows.Add(vals);
     }
}

3. 自动在每行前面生成索引

见下面的代码,dgv_RowPostPaint是datagirdview的RowPostPaint事件的绑定回调函数。

private void dgv_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
    //自动编号,与数据无关
    Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, dgv.RowHeadersWidth - 4, e.RowBounds.Height);
    TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), dgv.RowHeadersDefaultCellStyle.Font, rectangle,  dgv.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
}

4. 点击表头排序
首先得设置要具备该功能的列标题的SortMode属性为 DataGridViewColumnSortMode.Programmatic(见1. 动态加datagridview列标题部分的代码)。然后添加如下代码,dgv_ColumnHeaderMouseClick是datagirdview的ColumnHeaderMouseClick事件的绑定回调函数。

private void dgv_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    if (dgv.Columns[e.ColumnIndex].SortMode != DataGridViewColumnSortMode.Programmatic)
    {
        return;
    }
    switch (dgv.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection)
    {//若没有排序,或者是降序,就按升序重排
      case SortOrder.None:
      case SortOrder.Descending:
          dgv.Sort(dgv.Columns[e.ColumnIndex], ListSortDirection.Ascending);
          dgv.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = SortOrder.Ascending;
          break;
       default://若是升序排列,就按降序重排
          dgv.Sort(dgv.Columns[e.ColumnIndex], ListSortDirection.Descending);
          dgv.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = SortOrder.Descending;
           break;
    }
}

5. 设置滚动条到指定位置
通过CurrentCell 属性可设置滚动条的位置,如下,其中nRow和nCollumn就是指定位置的行和列的索引。

dgv.CurrentCell = dgv.Rows[nRow].Cells[nCollumn];
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值