0

I've 3 different DATA will load dynamic to _ListView. With DATA1 I need to add more column for showing checkbox control in every row.

I can't get it work, output shows CheckBox as String like below

screenshot

detail of CS file:

public void DataLoad1()
{


            var rowDT = data.GetListData();

            string[] str = new string[rowDT.Columns.Count];

            // loop data
            foreach (DataRow row in rowDT.Rows)
            {
                for (int i = 0; i <= rowDT.Columns.Count - 1; i++)
                {
                    str[i] = row[i].ToString();
                }


                // create checkbox
                CheckBox chk = new CheckBox
                {
                    // checkbox properties
                    Content = str[0],
                    IsChecked = false,
                    IsEnabled = true
                };

                _listView.Items.Add(
                    new
                    {
                        chkBox  = chk,
                        DocNo   = str[0],
                        QtyReq  = str[1],
                        Price   = help.ThousandSeparator(str[2]),
                        Date    = help.ConvertDate(str[3]),
                        Status  = help.ConvertStatus(str[4]),
                        Confirm = help.ConvertConfirmed(str[5])
                    }
               );

            }
        }

here is detail of XAML file :

<ListView x:Name="_listView" Height="365" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
                        <ListView.ItemContainerStyle>
                            <Style TargetType="{x:Type ListViewItem}">
                                <Setter Property="BorderBrush" Value="LightGray" />
                                <Setter Property="BorderThickness" Value="0,0,1,1" />
                            </Style>
                        </ListView.ItemContainerStyle>
                    </ListView>

is it possible i can achieve this without editing XAML file?

2 Answers 2

1

You have to add checkbox in template

var gridView = new GridView();

        FrameworkElementFactory FEF = new FrameworkElementFactory(typeof(CheckBox));
        FEF.AddHandler(CheckBox.ClickEvent, new RoutedEventHandler(CheckBox_CheckChanged), true);
        Binding CBG = new Binding("DocNo");
        FEF.SetBinding(CheckBox.ContentProperty, CBG);

        Binding SBG = new Binding
        {
            Path = new PropertyPath("chkBox"),
            Mode = BindingMode.OneWay,
        };
        FEF.SetBinding(CheckBox.IsCheckedProperty, SBG);

        gridView.Columns.Add(new GridViewColumn()
        {
            Header = "CheckBox",
            CellTemplate = new DataTemplate() { VisualTree = FEF }
        });

        gridView.Columns.Add(new GridViewColumn() { Header = "DocNo", DisplayMemberBinding = new Binding("DocNo") });
        gridView.Columns.Add(new GridViewColumn() { Header = "QtyReq", DisplayMemberBinding = new Binding("QtyReq") });
        gridView.Columns.Add(new GridViewColumn() { Header = "price", DisplayMemberBinding = new Binding("Price") });

        _listView.View = gridView;

        for (int i = 0; i < 5; i++)
        {
            _listView.Items.Add(
                new
                {
                    chkBox = true,
                    DocNo = i + "test",
                    QtyReq = i + "test",
                    Price = i + "test"
                }
           );
        }

creating-wpf-check-list-box-using-c-sharp-code-behind

in above sample using test data , replace with original data

Sign up to request clarification or add additional context in comments.

Comments

0

That should probably help you achieve what you need, although the logic here is not very efficient.

<ListView x:Name="_listView" 
    Height="365" 
    Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="BorderBrush" Value="LightGray" />
            <Setter Property="BorderThickness" Value="0,0,1,1" />
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                           <CheckBox Content="{Binding DocNo}" IsChecked="{Binding Checked, Mode=OneWay}"/>  
                       </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn DisplayMemberBinding="{Binding DocNo}" Header="Request Number" />
                <GridViewColumn DisplayMemberBinding="{Binding QtyReq}" Header="Requested to UL" />
                <GridViewColumn DisplayMemberBinding="{Binding Price}" Header="Price" />
                <GridViewColumn DisplayMemberBinding="{Binding Date}" Header="Date" />
                <GridViewColumn DisplayMemberBinding="{Binding Status}" Header="Status" />
                <GridViewColumn DisplayMemberBinding="{Binding Confirm}" Header="Received" />
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>

and cs

public void DataLoad1()
{
    var rowDT = data.GetListData();

    // loop data
    foreach (DataRow row in rowDT.Rows)
    {
        var str = row.Select(o => o.ToString()).ToList();

        _listView.Items.Add(new {
            Checked = false,
            DocNo   = str[0],
            QtyReq  = str[1],
            Price   = help.ThousandSeparator(str[2]),
            Date    = help.ConvertDate(str[3]),
            Status  = help.ConvertStatus(str[4]),
            Confirm = help.ConvertConfirmed(str[5])
        });
    }
}

1 Comment

can we do this without editing XAML? because other DATA2, DATA3 is different size column?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.