Click here to Skip to main content
15,894,540 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Dear All,

In WPF Data Grid have used DataGridCheckBoxColumn. some rows only I want to display this check Box. other column should not be display the check box. How to implement in datagrid in WPF.

<datagrid removed="Gray" autogeneratecolumns="False" canvas.left="-29" canvas.top="60" height="490" x:name="grd_balance" width="789" gridlinesvisibility="Vertical" selectionmode="Single" verticalscrollbarvisibility="Visible" canuserreordercolumns="False" canuserresizecolumns="False" canuserresizerows="False" canusersortcolumns="False" canuseraddrows="False" xmlns:x="#unknown">
               <datagrid.columns>
                   <datagridcheckboxcolumn binding="{Binding checked}" cellstyle="{StaticResource SingleClick}" />
                   <datagridtextcolumn header="Voucher Date" binding="{Binding voc_date}" fontfamily="Calibri" fontsize="12" canuserresize="False" canusersort="False" width="100" />
                   <datagridtextcolumn header="Voucher No" binding="{Binding vocno}" fontfamily="Calibri" fontsize="12" canuserresize="False" canusersort="False" width="100" /></datagrid.columns>
           </datagrid>


Thank U,

Regards,
Maha S.
Posted

Hi,

return one more column from your database which contains the information about which rows have to display the checkbox and bind it to the visible property of the checkbox.

Hope this helps.....
 
Share this answer
 
Comments
lakshmi.ksangam 28-Nov-11 5:00am    
suppose have returned the column value 0 and 1. then how do i set the visible property. please send me the code.
sriman.ch 29-Nov-11 0:13am    
<datagridcheckboxcolumn binding="{Binding checked}" cellstyle="{StaticResource SingleClick}" visibility="{Binding Path=yourdatabasecolumnname,Converter={StaticResource boolToVis}}">
Hi,

Create a class and name it as per your naming conventions and write the following code in that class

C#
public class Converters : IValueConverter
   {
       public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
       {
           Visibility rv = Visibility.Visible;
           try
           {
               var x = bool.Parse(value.ToString());
               if (x)
               {
                   rv = Visibility.Visible;
               }
               else
               {
                   rv = Visibility.Collapsed;
               }
           }
           catch (Exception)
           {
           }
           return rv;
       }

       public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
       {
           return value;
       }

   }



Now in your XAML register this class
VB
<Window x:Class="WpfTestApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        xmlns:converters="clr-namespace:yournamespace">



and add this converter as a resource

XML
<Canvas.Resources>
            <converters:Converters x:Key="boolToVis"/>

        </Canvas.Resources>



I am giving a general example manipulate as per your requirement
XML
<CheckBox Canvas.Left="96" Canvas.Top="19" Content="CheckBox" Height="16" Name="checkBox1" IsChecked="True"/>
        <CheckBox Canvas.Left="96" Canvas.Top="54" Content="CheckBox" Height="16" Name="checkBox2" Visibility="{Binding ElementName=checkBox1,Path=IsChecked,Converter={StaticResource boolToVis}}"/>


Eg:

<datagridcheckboxcolumn binding="{Binding checked}" cellstyle="{StaticResource SingleClick}" visibility="{Binding Path=your database column name,Converter={StaticResource boolToVis}}">



Hope this helps.

Do let me know if you need any more details

Regards,
Sriman
 
Share this answer
 
Comments
lakshmi.ksangam 29-Nov-11 7:55am    
Hi Sriman,

Thanks for your Reply...

Had used the above sample code.

in My code

<datagridcheckboxcolumn.elementstyle>
<Style TargetType="CheckBox">
<setter property="Visibility" value="{Binding ElementName=grdchk,Path=IsChecked,Converter={StaticResource discolum},Mode=OneWay}">
</Style>


In the above coding line "Converter={StaticResource discolum}" the following error was shown.

An object of the type "e_cdsl.Classes.gridcolumnvisible"(namespace name) cannot be applied to a property that expects the type "System.Windows.Data.IValueConverter"

Give me the solution..
sriman.ch 29-Nov-11 21:20pm    
post the code you have written so that I can help you out......
lakshmi.ksangam 30-Nov-11 1:30am    
Below my coding..


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Windows.Media;
using System.Data;
using System.Windows;
using System.Windows.Controls;

namespace e_cdsl.Classes
{
class gridcolumnvisible
{
public class Converters : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Visibility rv = Visibility.Visible;
try
{
var x = bool.Parse(value.ToString());
if (x)
{
rv = Visibility.Visible;
}
else
{
rv = Visibility.Collapsed;
}
}
catch (Exception)
{
}
return rv;
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}

}
}
}


<usercontrol x:class="e_cdsl.Posting.BalanceTransfer"
="" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:convert="clr-namespace:e_cdsl.Classes" mc:ignorable="d" name="DpExport" xmlns:my1="clr-namespace:e_cdsl.Custom_Controls" height="741" width="1019" xmlns:my="clr-namespace:e_cdsl.Classes">
<usercontrol.resources>
<convert:gridformatconverter x:key="convert">
<convert:gridcolorconverter x:key="gridbackcolor">
<convert:gridrowcol x:key="ledtotcol">
<convert:gridcolumnvisible x:key="discolum">
<datagrid removed="Gray" autogeneratecolumns="False" canvas.left="-29" canvas.top="60" height="490" x:name="grd_balance" width="789" gridlinesvisibility="Vertical" selectionmode="Single" verticalscrollbarvisibility="Visible" canuserreordercolumns="False" canuserresizecolumns="False" canuserresizerows="False" canusersortcolumns="False" canuseraddrows="False">
<datagrid.columns>
<datagridcheckboxcolumn binding="{Binding checked, Mode=TwoWay}" cellstyle="{StaticResource SingleClick}" x:name="grdchk">
<datagridcheckboxcolumn.elementstyle>
<Style TargetType="CheckBox">
<setter property="Visibility" value="{Binding ElementName=grdchk,Path=IsChecked,Converter={StaticResource discolum},Mode=OneWay}">
</Style>


<datagridtextcolumn header="Voucher Date" binding="{Binding voc_date}" fontfamily="Calibri" fontsize="12" canuserresize="False" canusersort="False" width="100">
<datagridtextcolumn header="Voucher No" binding="{Binding vocno}" fontfamily="Calibri" fontsize="12" canuserresize="False" canusersort="False" width="100">
<datagridtextcolumn header="Voucher Amount" binding="{Binding debit, Converter={StaticResource convert}}" elementstyle="{StaticResource RightAlignStyle}" fontfamily="Calibri" fontsize="12" canuserresize="False" canusersort="False" width="50">
<datagridtextcolumn.headerstyle>
<Style>
<setter property="FrameworkElement.HorizontalAlignment" value="Right">

</Style>
sriman.ch 30-Nov-11 1:36am    
Why you have written style and where? I just asked you to post XAML code!! Go through my solution once again carefully.
1.First Create a class and paste the code of converter.
2.Add reference to that class in your XAML
3.Then add this converter to the resource section.
4.Call this converter in the visibility property of datagrid checkbox column.
lakshmi.ksangam 30-Nov-11 1:48am    
MY XAML code


<usercontrol x:class="e_cdsl.Posting.BalanceTransfer"
="" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:convert="clr-namespace:e_cdsl.Classes" mc:ignorable="d" name="DpExport" xmlns:my1="clr-namespace:e_cdsl.Custom_Controls" height="741" width="1019" xmlns:my="clr-namespace:e_cdsl.Classes">
<usercontrol.resources>
<convert:gridformatconverter x:key="convert">
<convert:gridcolorconverter x:key="gridbackcolor">
<convert:gridrowcol x:key="ledtotcol">
<convert:gridcolumnvisible x:key="discolum">

<canvas x:name="layout" height="669" width="753" margin="0,-5,-22,7">
<datagrid removed="Gray" autogeneratecolumns="False" canvas.left="-29" canvas.top="60" height="490" x:name="grd_balance" width="789" gridlinesvisibility="Vertical" selectionmode="Single" verticalscrollbarvisibility="Visible" canuserreordercolumns="False" canuserresizecolumns="False" canuserresizerows="False" canusersortcolumns="False" canuseraddrows="False">
<datagrid.columns>
<datagridcheckboxcolumn binding="{Binding checked, Mode=TwoWay}" cellstyle="{StaticResource SingleClick}" x:name="grdchk">
<datagridcheckboxcolumn.elementstyle>
<Style TargetType="CheckBox">
<setter property="Visibility" value="{Binding ElementName=grdchk,Path=IsChecked,Converter={StaticResource discolum},Mode=OneWay}">
</Style>


<datagridtextcolumn header="Voucher Date" binding="{Binding voc_date}" fontfamily="Calibri" fontsize="12" canuserresize="False" canusersort="False" width="100">


<usercontrol x:class="e_cdsl.Posting.BalanceTransfer" xmlns:x="#unknown">
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:convert="clr-namespace:e_cdsl.Classes" 
             mc:Ignorable="d" Name="DpExport"
             xmlns:my1="clr-namespace:e_cdsl.Custom_Controls"
         Height="741" Width="1019" xmlns:my="clr-namespace:e_cdsl.Classes" >
    <usercontrol.resources>
        <convert:gridformatconverter x:key="convert" xmlns:convert="#unknown" />
        <convert:gridcolorconverter x:key="gridbackcolor" xmlns:convert="#unknown" />
        <convert:gridrowcol x:key="ledtotcol" xmlns:convert="#unknown" />   
        <convert:gridcolumnvisible x:key="discolum" xmlns:convert="#unknown" />
    </usercontrol.resources>
<canvas x:name="layout" height="669" width="753" margin="0,-5,-22,7">
<datagrid background="Gray" autogeneratecolumns="False" canvas.left="-29" canvas.top="60" height="490" x:name="grd_balance" width="789" gridlinesvisibility="Vertical" selectionmode="Single" verticalscrollbarvisibility="Visible" canuserreordercolumns="False" canuserresizecolumns="False" canuserresizerows="False" canusersortcolumns="False" canuseraddrows="False">
                <datagrid.columns>
                    <datagridcheckboxcolumn binding="{Binding checked, Mode=TwoWay}" cellstyle="{StaticResource SingleClick}" x:name="grdchk">                                                 
                        <datagridcheckboxcolumn.elementstyle>
                            <style targettype="CheckBox">
                                <setter property="Visibility" value="{Binding ElementName=grdchk,Path=IsChecked,Converter={StaticResource discolum},Mode=OneWay}" />
                            </style>
                        </datagridcheckboxcolumn.elementstyle>
                    </datagridcheckboxcolumn>                  
                    <datagridtextcolumn header="Voucher Date" binding="{Binding voc_date}" fontfamily="Calibri" fontsize="12" canuserresize="False" canusersort="False" width="100" />
 </datagrid.columns></datagrid>
 </canvas>
</usercontrol>
 
Share this answer
 
Hi
Here is the working code for me

XML
<Window x:Class="WpfTestApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        xmlns:converters="clr-namespace:WpfTestApp" Loaded="Window_Loaded"
        WindowState="Maximized" WindowStyle="None" Width="1024" Height="768">
    <Canvas>
        <Canvas.Resources>
            <converters:Converters x:Key="boolToVis"/>
        </Canvas.Resources>
        <DataGrid Height="500" Width="700" Canvas.Left="37" Canvas.Top="41" x:Name="dgTest" ItemsSource="{Binding}">
            <DataGrid.Columns>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox x:Name="Test" Visibility="{Binding Path=Flag,Converter={StaticResource boolToVis}}"></CheckBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>

                </DataGridTemplateColumn>

            </DataGrid.Columns>

        </DataGrid>
    </Canvas>
</Window>



Where flag is your database column name

WpfTestApp: Your namespace
<converters:converters x:key="boolToVis" xmlns:x="#unknown" xmlns:converters="#unknown">

Converters is the class where I have placed my convert code.

Hope this helps.

Regards
Sriman
 
Share this answer
 
Comments
lakshmi.ksangam 30-Nov-11 6:23am    
Already Had try this code. In run time check the check box dataset was not updated when use the above code. But i was used Mode ="TwoWay" in XAML page
sriman.ch 5-Dec-11 23:10pm    
This code ir working fine for me..

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900