DataGrid使用总结

来源:互联网 发布:基德 知乎 编辑:程序博客网 时间:2024/05/18 03:14

1. dataGridView中有用的一些属性

AllowUserToResizeRows允许用户调整行的宽度

AllowUserToResizeColumns允许用户调整列的长度

ColumnHeadersVisible是否有一个系统颜色的列头

MultiSelect 是否可以一次选择多行

ReadOnly是否是只读的单元格

SelectionMode 单元格选择,整行选择,整列选择,行头选择,列头选择

2. dataGridView改变列的排序

改列名

this.DataGridView1.Column["sql语句中的列名"].HeaderText= "newName";

 

修改列的显示位置

this.DataGridView1.Column["sql语句中的列名"].DisplayIndex= newIndex;

比如把某一列变成第一列

dv.Columns["2"].DisplayIndex =0

 

datagridview中列的位置不一定是根据select语句中列的顺序来的

3.实现DataGridView中行的上下移动。

1)   如果dgOutImage.DataSource=集合(RecFileArgs)

(向上移动)

dgOutImage.DataSource= new BindingList<RecFileArgs>(RecFileArgs1);

 

//如果选择的是多行

if (dgOutImage.SelectedRows.Count> 1)

 {

     return;

 }

  dgOutImage.Focus();

//目前选择的行号

    int rowIndex =dgOutImage.CurrentRow.Index;

     if (rowIndex!= 0)

      {

     RecFileArgs _reccCurr = dvrPlayListRight[rowIndex];

     RecFileArgs_reccPer = dvrPlayListRight[rowIndex - 1];

     dvrPlayListRight[rowIndex] = _reccPer;

     dvrPlayListRight[rowIndex - 1] = _reccCurr;

     dgOutImage.DataSource = dvrPlayListRight;

     dgOutImage.Refresh();

     dgOutImage.Rows[rowIndex - 1].Selected = true;

     dgOutImage.CurrentCell =dgOutImage.Rows[rowIndex - 1].Cells[0];

       }

if (rowIndex - 1 == 0)

       {

           向上按钮.Enabled = false;

       }

       else

       {

           向上按钮.Enabled = true;

   }

2)   如果dgOutImage.DataSource=DataTable

(向下移动)

object[] _rowData   =   DataTable.Rows[i].ItemArray;

DataTable.Rows[i].ItemArray  =   DataTable.Rows[i+1].ItemArray  

DataTable.Rows[i+1].ItemArray  =   _rowData;

4. DataGridView中某一行的某一列的选取方法

for (int i = 0; i < DataGridView1.SelectedRows.Count;i++)

  {

//第i行第一列

String ai1=DataGridView1.SelectedRows[i].Cells[0].Value.ToString();

//第i行第二列

String ai2=DataGridView1.SelectedRows[i].Cells[1].Value.ToString();

}

5.DataGridView中当前选取行的行号

int rowIndex = DataGridView1.CurrentRow.Index;

2.  DataGridView中的列不能排序

DataGridView1.Columns[0].SortMode =System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;

DataGridView1.Columns[1].SortMode =System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;

3.  DataGridView中一列一列的绑定(列名存在集合arrList中,数据存在DataTable)

解释:集合(arrList)中存SQL语句SELECT中的”名字” 转换成DataTable的“列名”

//通过集合中的名字创建列名

protected DataTable CreateTable(ArrayList arrList, DataReaderreader)

               // reader可以从ExecuteReader获得

        {

// DataTable的名字

            DataTable dt = new DataTable("table");

        

//DataTable定列名

            for (int i= 0; i < arrList.Count; i++)

            {

                DataColumn dtColumn =newDataColumn();

                dtColumn.ColumnName = (string)arrList[i];

               dt.Columns.Add(dtColumn);

            }

 

         //DataTable里加行

            DataRow dtRow;

            while (reader.Read())

            {

                dtRow =dt.NewRow();

                for (int i = 0; i < arrList.Count; i++)

                {

                    try

                    {

                       dtRow[(string)arrList[i]] =reader.GetValue(i).ToString();

                    }

                    catch

                    {

                       dtRow[(string)arrList[i]] = System.DBNull.Value;

                    }

                }

               dt.Rows.Add(dtRow);

            }

            return dt;

       }

 

DataTable  m_listViewInfo = CreateTable(集合名,DataReader名);

 

//DataTable绑定到DataView

DataView dvListViewInfo = new DataView(m_listViewInfo);

dataGridView1.Columns.Clear();

//取消dataGridView1按默认方式显示

dataGridView1.AutoGenerateColumns= false;

//绑定DataViewdataGridView

dataGridView1.DataSource = dvListViewInfo;

 

DataGridViewTextBoxColumn dtcTimeStamp =newDataGridViewTextBoxColumn();

dtcTimeStamp.DataPropertyName = "TIMESTAMP";//设置数据源属性的名称

dtcTimeStamp.HeaderText = "日期";//列头显示的汉字

dtcTimeStamp.Width = 110;

dtcTimeStamp.DefaultCellStyle.Alignment=DataGridViewContentAlignment.MiddleCenter;

dtcTimeStamp.ReadOnly = true;

dtcTimeStamp.SortMode = DataGridViewColumnSortMode.NotSortable;

dataGridView1.Columns.Add(dtcTimeStamp);//最后一定要添加进去

4.  在DataGridView中第一列手动添加行号

//一个查询好的datatable,返回添加序号的datatable

        public DataTableretdt(DataTable dt)

        {

            dt.Columns.Add("SN",typeof(Int32));

            //SN放到第一位

            dt.Columns["SN"].SetOrdinal(0);

            int i = 0;

            foreach (DataRow dr in dt.Rows)

            {

                dt.Rows[i][0] = i +1;

                i++;

            }

            return dt;

}

5.  自己建DataGridView就这3步

DataView dvCmControlInfo =new DataView(某个DataTable);

 

dataGridView1.Columns.Clear();

dataGridView1.AutoGenerateColumns =false;

dataGridView1.DataSource =dvCmControlInfo;//绑DataTable,DataSet,DataView,BindingList

dataGridView1.DataMember= “”;//当绑定多表数据源时,这里写表名。

 

DataGridViewTextBoxColumn dtGroup =new DataGridViewTextBoxColumn();

dtGroup.DataPropertyName = "group"; //DataTable中代表“小组”的名字

dtGroup.HeaderText = "小组";        //DataGridView标题显示的名字

dataGridView1.Columns.Add(dtGroup);

 

dataGridView1.Columns[0].Width =30;  //手动设定一格长度

 

dataGridView1.Columns[0].SortMode =System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;//不可以按序排列

 

dataGridView1.ColumnHeadersDefaultCellStyle.Alignment=DataGridViewContentAlignment.MiddleCenter;//每一格中内容居中排列

 

10. DataGridView失去焦点,初始状态第一行不选中

dataGridView1.ClearSelection();

 

11. DataGridView中有可编辑单元格时,保存当前正在编辑的单元格信息。

有时DataGridView上的单元格是可以编辑的,或者DataGridView某一列是ComboBox、CheckBox,这时用户在编辑完信息而没有点击任何别的地方(点击别的地方就不会出现以下问题),直接点击保存按钮(只要是需要获取DataGridView当前各个单元格信息的操作),当前已更改的编辑项将不能获取到,只有让DataGridView处在停止编辑并且接受到当前所有可编辑单元格的内容时,才能正确保存当前所有信息。这个“停止编辑并且接受到当前所有可编辑单元格的内容”的功能就是下面两行代码。

dataGridView1.CommitEdit((DataGridViewDataErrorContexts)123);

dataGridView1.BindingContext[dataGridView1.DataSource].EndCurrentEdit();

0 0