单击多个复选框时,如何以字符串格式存储listview行项(list <string>或任何其他逻辑数据结构)

时间:2016-12-09 16:49:25

标签: c# wpf listview gridview

这是我想要实现的。我使用ListView构建了一个视图,并将ListView的ItemSource与XML文件绑定在一起,以便将xml内容显示为listview Items.Also我在ListView中提供了GridView列为每个xml内容添加复选框和文本框。

以下是xaml代码。

    <Window.Resources>
            <!--XML Data Source-->
            <XmlDataProvider x:Key="InstrumentList" Source="Instrumentlist.xml"/>
        </Window.Resources>
        <Grid>

            <ListView Height="153" 
                  HorizontalAlignment="Left" 
                  Name="listView1" 
                  VerticalAlignment="Top" 
                  Width="503"
                  ItemsSource="{Binding Source={StaticResource InstrumentList}, XPath=instrument/instruments}">
                <ListView.View>
                    <GridView>
                        <GridView.Columns>
                            <GridViewColumn x:Name="g1" >
                                <GridViewColumn.HeaderTemplate>
                                    <DataTemplate >
                                        <CheckBox x:Name="checkall" />
                                    </DataTemplate>
                                </GridViewColumn.HeaderTemplate>
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <CheckBox IsChecked="False"/>

                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn  Header="Instrref" />
                            <GridViewColumn Width="120" Header="OrderLimit">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBox Name="txt_OrderLimit" Width="100"/>

                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Width="120" Header="ValueLimit">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBox Name="txt_ValueLimit" Width="100"/>

                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>

                        </GridView.Columns>


                    </GridView>
                </ListView.View>
            </ListView>
            <Button x:Name="button" Content="Submit" HorizontalAlignment="Left" Margin="0,174,0,0" VerticalAlignment="Top" Width="194" Click="button_Click"/>
        </Grid>
    </Window>

上面我们在GridView datatemplate中有复选框和两个文本框。当我对复选框进行多次检查时,我想要检索xml数据内容以及文本框内容,以便存储在一些有用的资源中,以便我以后可以访问它。 / p>

XML文件内容:

    <?xml version="1.0" encoding="utf-8" ?>
    <instrument>

      <instruments>
      <instrument_reference>NIFTY12SEP8700CE</instrument_reference>
      </instruments>
      <instruments>
      <instrument_reference>NIFTY12SEP8600CE</instrument_reference>
      </instruments>
      <instruments>
      <instrument_reference>NIFTY12SEP8900CE</instrument_reference>
      </instruments>
      <instruments>
        <instrument_reference>NIFTY12SEP9000CE</instrument_reference>
      </instruments>
      <instruments>
        <instrument_reference>NIFTY12SEP9100CE</instrument_reference>
      </instruments>
      <instruments>
        <instrument_reference>NIFTY12SEP9200CE</instrument_reference>
      </instruments>
    </instrument>

正如您可以看到视图在提供的屏幕截图中的样子。我想对复选框进行多次检查,并为文本框提供输入,这样当我点击提交按钮时,在buttonn点击事件我应该能得到-INSTRUMENT REF,TEXTBOX-ORDERLIMIT,TEXTBOX-VALUELIMIT值存储在数据表,列表或任何方便的资源中以供以后使用。

请帮助我如何访问这些元素值。

1 个答案:

答案 0 :(得分:1)

首先在checkAll上添加一个事件处理程序,相应地设置它,并为您的GridView命名。类似的东西:

XAML

<GridView x:Name="gvMyGridView">
    //EVERYTHING ELSE
</GridView>

C#

private void checkAll_Checked(object sender, RoutedEventArgs e)
{
    if (checkAll.IsChecked == true)
    {
        foreach (GridViewColumn gvc in gvMyGridView.Children)
        {
            foreach (CellTemplate ct in gvc)
            {
                foreach (Checkbox cb in ct)
                {
                    cb.IsChecked = true;
                }
            }
        }
    }
}

然后你可以冲洗并重复一遍,从文本框中获取字符串值并将它们分配给List<string>,如:

private void button_Clicked(object sender, RoutedEventArgs e)
{
    List<string> lstContent = new List<string>();
    foreach (GridViewColumn gvc in gvMyGridView.Children)
    {
        foreach (CellTemplate ct in gvc)
        {
            foreach (Checkbox cb in ct)
            {
                if (cb.IsChecked == true)
                    lstContent.Add(/*Corresponding Text Box*/.Content.ToString();
            }
        }
    }
}

希望有所帮助。让我知道会发生什么,如果你需要更多的帮助,我会做我能做的事情