环境:vs2005  winform 问题: datagridview的第一列是checkbox列, checkbox列的checkbox选择后, 按照列头名排序后,选择的checkbox的值都会被清空的...我想实现的是别让选择的checkbox值清空, 保持原来的状态? 请大侠执教?
说明:我的排序是这么做的, datagridview的值以循环,存到datatable, 然后datatable.DefaltView来存到dataview,然后用sort来排序, 排序之后的在邦定到datagridview来显示...为了实现,我这种方法也试过...
datagridview的值以循环,存到datatable时,checkbox的值也存下来了...但这样出现这种问题, 比如,我选择了两个checkbox,但排序之后,选择的checkbox变成好几个了...

解决方案 »

  1.   

    为了实现,我这种方法也试过... 
    datagridview的值以循环,存到datatable时,checkbox的值也存下来了...但这样出现这种问题, 比如,我选择了两个checkbox,但排序之后,选择的checkbox变成好几个了... 这个就可行.
    如果出现好几个,可能是你代码方面的问题.
    你存的时候尽量让你选中的checkbox对应数据行里的唯一ID.
      

  2.   

    每条信息能有一个唯一的标志变量吗?
    如果有的话,可以在点击checkBox的时候将这条信息的标志量存到一个预设的数组中,排序以后加载时比对一下,如果预设数组中有这个标志量,直接将其设为选中状态……
      

  3.   

    数据源人为地插入一列不就可以了using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;namespace WindowsFormsApplication76
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();            DataTable DT = new DataTable();
                DT.Columns.Add("c1");            DT.Rows.Add(new Object[] { 1 });
                DT.Rows.Add(new Object[] { 2 });
                DT.Rows.Add(new Object[] { 3 });
                DT.Rows.Add(new Object[] { 4 });
                DT.Rows.Add(new Object[] { 5 });            DataGridView DGV = new DataGridView();
                DGV.Parent = this;
                DGV.Dock = DockStyle.Fill;
                
                DataGridViewTextBoxColumn TextColumn=new DataGridViewTextBoxColumn();
                TextColumn.DataPropertyName = "c1";
                TextColumn.SortMode = DataGridViewColumnSortMode.Automatic;
                DGV.Columns.Add(TextColumn);            DataGridViewCheckBoxColumn CheckBoxColumn = new DataGridViewCheckBoxColumn();
                CheckBoxColumn.DataPropertyName = "temp";
                DGV.Columns.Insert (0,CheckBoxColumn);            DT.Columns.Add("temp");
                
                DGV.DataSource = DT;
            }
        }
    }
      

  4.   


    <你存的时候尽量让你选中的checkbox对应数据行里的唯一ID>
    这句话不太懂,唯一ID怎么设置?
    请详细说明好吗
    谢谢
      

  5.   


    你把数据库中的主键一块查出来,能标识行不的一个列,排完序后,还能识别哪一行是哪一行.这样,你循环设置完各行的CheckBox,最后按照这个ID号,设置当前行的值不变.
      

  6.   

    datagridview的值以循环,存到datatable时,checkbox的值也存下来了...但这样出现这种问题, 比如,我选择了两个checkbox,但排序之后,选择的checkbox变成好几个了... 你这样试试:存到datatable后,重新dataGridView1.DataSource = null;
    dataGridView1.DataSource = 数据源;
      

  7.   

      排序时,记录原选中行的主键,重新绑定时再给checkbox重新赋值是可行的
      

  8.   

     private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                if (this.dataGridView1.Columns[e.ColumnIndex].Name.Equals(""))
                {
                    DataGridViewButtonCell dgvButtonCell = this.dataGridView1.Rows[e.RowIndex].Cells[" "] as DataGridViewButtonCell;
                    DataGridViewCheckBoxCell dgvCheckBoxCell = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewCheckBoxCell;
                    //或dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue.ToString() == "True"
                     string s = dgvCheckBoxCell.Value.ToString();
                }
            }
    值变化是获取主键值,在重新绑定时,重新设置checkbox的选择属性
      

  9.   

    在绑定事件里 修改:private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
            { 
                if (this.dataGridView1.Columns[e.ColumnIndex].Name.Equals("")) 
                { 
                    DataGridViewButtonCell dgvButtonCell = this.dataGridView1.Rows[e.RowIndex].Cells[" "] as DataGridViewButtonCell; 
                    DataGridViewCheckBoxCell dgvCheckBoxCell = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewCheckBoxCell; 
                    //或dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue.ToString() == "True" 
                    string s = dgvCheckBoxCell.Value.ToString(); 
                } 
            }