c# - WPF: Custom Datagrid with Checboxes -


i want create datagrid in our application looks this:

|name|email      |oc |path|01.01.17|05.08.17|... (more dates , checkboxes) |foo |foo@bar.com|...|... |[x]     |        |... |bar |bar@bar.com|...|... |[ ]     |[x]     |... |foo |foo@bar.com|...|... |        |[ ]     |... 

as can see column count has dynamic , checkbox column can contain either checkbox or nothing. approach use converter build datatable.

public object convert(object value, type targettype, object parameter, cultureinfo culture) {     var techwithdates = (techfvo[])value;     var datatable = new datatable();      datatable.columns.add(new datacolumn("name"));     datatable.columns.add(new datacolumn("email"));     datatable.columns.add(new datacolumn("oc"));     datatable.columns.add(new datacolumn("path"));      if (techwithdates == null)         return datatable.defaultview;      var days = getformatteddays(techwithdates);     foreach (var day in days)         datatable.columns.add(new datacolumn(day, typeof(bool)));      datatable.rows.add(datatable.newrow());      foreach (var tech in techwithdates)     {         if (tech.getterminliste().count == 0)             continue;          var datarow = datatable.newrow();         datarow[0] = tech.name;         datarow[1] = tech.email;         datarow[2] = string.isnullorwhitespace(tech.path) ? "no" : "yes";         datarow[3] = tech.path;         addtechcols(datarow, tech, days);         datatable.rows.add(datarow);     }      return datatable.defaultview; }  private void addtechcols(datarow row, techfvo techs, list<string> adays) {     var dates = techs.getterminliste();     var datesasstrlist = new list<string>();     foreach (var date in dates)     {         var thisstr = datetostring(date.day);         if (!datesasstrlist.contains(thisstr))             datesasstrlist.add(thisstr);     }      foreach (var aday in adays)     {         if (datesasstrlist.contains(aday))             row[aday] = true;         else             row[aday] = dbnull.value;     } } 

this works there checkboxes in every checkbox column in every row. how hide checkbox in column when build row?

i tried

row[aday] = false; row[aday] = null; row[aday] = dbnull.value(); 

but nothing worked... thanks!

you can intercept moment when datagridcheckboxcolumns created , change checkboxes settings.

add event handler datagrid.autogeneratingcolumn event

<datagrid autogeneratingcolumn="datagrid_onautogeneratingcolumn"> </datagrid> 
// fixing checkboxes in datagrid datagridcheckboxcolumns private void datagrid_onautogeneratingcolumn(object sender, datagridautogeneratingcolumneventargs e) {     var column = e.column datagridcheckboxcolumn;     if (column == null)         return;      var dg = sender datagrid;     if (dg == null)         return;      column.elementstyle = (style)dg.findresource("datechk");     column.editingelementstyle = (style)dg.findresource("datechk"); } 

"datechk" checkbox style, declared in resources, makes checkbox hidden , disabled when value null (or dbnull.value in datatable)

<style x:key="datechk" targettype="checkbox">     <style.triggers>         <trigger property="ischecked" value="{x:null}">             <setter property="visibility" value="hidden"/>             <setter property="isenabled" value="false"/>         </trigger>     </style.triggers> </style> 

Comments

Popular posts from this blog

What is happening when Matlab is starting a "parallel pool"? -

angular - DownloadURL return null in below code -

php - Cannot override Laravel Spark authentication with own implementation -