[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 840
  • Last Modified:

Sort Column with Type = CheckBox in DataTable?

Hello,

today I recognized that I can sort all 7 columns in my datagridview but not the column with type checkbox. I want to sort all rows with checkbox set to TRUE.

I found the info that I can not sort the DataTable but only the DataGridView?!

column0 is the column with the CheckBox.

How can I sort the first column with checkbox without destroying my whole code?
public void SetColumnsReadProperty()
        {
            for (int i = 2; i < articlesDataGridView.Columns.Count; i++)
                articlesDataGridView.Columns[i].ReadOnly = true;
             
        }
 
public void BindArticleList(AdsExtendedReader reader)
        {
            if (articlesDataGridView.InvokeRequired)
            {                
                articlesDataGridView.Invoke(uPB, new object[] { reader });
            }
            else
            {
                InitDataGridView();
                dataview.Table.Load(reader);
                articlesDataGridView.DataSource = dataview;
                SetColumnsReadProperty();
            }
        }
 
private void InitDataGridView()
        {
            datatable = new DataTable();
            dataview = new DataView(datatable);
            
            var column0 = new DataColumn { ColumnName = "Artikelfilter", ReadOnly = false, DataType = typeof(Boolean) };           
            datatable.Columns.Add(column0);           
            
            var column1 = new DataColumn { ColumnName = "Punkte", ReadOnly = false, DataType = typeof(int) };
            datatable.Columns.Add(column1);           
 
            articlesDataGridView.AllowUserToResizeRows = false;
            datatable.CaseSensitive = false;
            articlesDataGridView.DataSource = dataview;
            
        }

Open in new window

0
MSFanboy
Asked:
MSFanboy
  • 2
  • 2
1 Solution
 
wht1986Commented:
instead of column0 being a plain DataColumn can you use DataGridViewCheckBoxColumn

then you can set the sort property
column0.SortMode == DataGridViewColumnSortMode.Automatic;
0
 
MSFanboyAuthor Commented:
I did the sort thingie already but it did not work, so I saw your post and tried the DataGridViewCheckBoxColumn suggestion, see code below.


The first Column gets displayed so far but when I set some checkbox to true and sort the new checkboxcolumn it doesnt get sorted ALTHOUGH I set the sortmode to every column to AUTOMATIC in the foreach. 
What can I do else?

private void InitDataGridView()
        {
            datatable = new DataTable();
            dataview = new DataView(datatable);
 
            var columnFilter = new DataGridViewCheckBoxColumn(false); // { ColumnName = "Artikelfilter", ReadOnly = false, DataType = typeof(Boolean) };
           // datatable.Columns.Add(columnFilter)
 
            articlesDataGridView.Columns.Add(columnFilter);
 
            foreach (DataGridViewColumn col in articlesDataGridView.Columns)
            {
                col.SortMode = DataGridViewColumnSortMode.Automatic;
            }
            
            var columnPunkte = new DataColumn { ColumnName = "Punkte", ReadOnly = false, DataType = typeof(int) };
            datatable.Columns.Add(columnPunkte);           
 
            articlesDataGridView.AllowUserToResizeRows = false;
            datatable.CaseSensitive = false;
            articlesDataGridView.DataSource = dataview;
            
        }

Open in new window

0
 
wht1986Commented:
I have an empty DataGridView on my form. In the code below, I create a datasource and assign it to my grid.  The grid is set to auto generate columns.  I manually add the first checkbox column, so I can easily set the properties I want.
public partial class Form1 : Form
{
    protected DataTable datatable = null;
    protected DataView dataview = null;
 
    private void BindArticleList()
    {
        datatable.Rows.Clear();
        datatable.Rows.Add(new object[] { false, 1 });
        datatable.Rows.Add(new object[] { true, 3 });
        datatable.Rows.Add(new object[] { false, 4 });
    }
 
    private void InitDataGridView()
    {
        datatable = new DataTable();
        datatable.Columns.Add(new DataColumn { ColumnName = "Artikelfilter", ReadOnly = false, DataType = typeof(Boolean) });
        datatable.Columns.Add(new DataColumn { ColumnName = "Punkte", ReadOnly = false, DataType = typeof(int) });
        dataview = new DataView(datatable);
 
        DataGridViewCheckBoxColumn dgvCbColumn = new DataGridViewCheckBoxColumn { DataPropertyName = "Artikelfilter", HeaderText = "Artikelfilter", SortMode = DataGridViewColumnSortMode.Automatic };
        articlesDataGridView.Columns.Add(dgvCbColumn);
 
        articlesDataGridView.DataSource = dataview;
    }
 
    private void Form1_Load(object sender, EventArgs e)
    {
        InitDataGridView();
        BindArticleList();
    }
 
    public Form1()
    {
        InitializeComponent();
    }
 
}

Open in new window

0
 
MSFanboyAuthor Commented:
that was the code which helped me:

DataGridViewCheckBoxColumn dgvCbColumn = new DataGridViewCheckBoxColumn { DataPropertyName = "Artikelfilter", HeaderText = "Artikelfilter", SortMode = DataGridViewColumnSortMode.Automatic };
        articlesDataGridView.Columns.Add(dgvCbColumn);
0

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now