我有一个邮件串数组,我想在WPF中创建一个包含2列,邮件列和复选框列的数据网格

问题描述 投票:0回答:2

我需要在wpf中创建一个包含2列,邮件和复选框的数据网格,之后我想要显示邮件并在它们附近显示一个复选框,我需要一个按钮来生成以下内容:所有已检查的复选框都在邮件附近会得到一封电子邮件(我有这个功能)

我试图用2列,bool和字符串制作一个数据表并在那里显示邮件,我的问题是,当我检查我想要选择的邮件附近的复选框时,当我按下按钮并在datagrid行上运行时, boolean仍然是false而不是true,因为那不会发送电子邮件

<DataGrid HorizontalAlignment="Left" Height="227" Margin="43,146,0,0" 
          VerticalAlignment="Top" Width="448" 
          Grid.ColumnSpan="2" Name="Datagrid1" AutoGenerateColumns="False">
     <DataGrid.Columns>
          <DataGridTextColumn Header="mails" Width="*" IsReadOnly="True" Binding="{Binding Path='Text'}"/>
                <DataGridTemplateColumn Header ="send or not" Width="*">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox Name="CheckboxMail"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

那就是数据网格。

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Selected", typeof(bool))); //this will show checkboxes
dt.Columns.Add(new DataColumn("Text", typeof(string)));   //this will show text

Datagrid1.DataContext = dt;

foreach (string s in mails)
{
    DataRow r = dt.NewRow();
    r[0] = (bool)false;
    r[1] = s;
    dt.Rows.Add(r);
}

Datagrid1.ItemsSource = dt.DefaultView;

创建数据表和数据网格

当我按下按钮时:

foreach(DataRowView r in Datagrid1.ItemsSource)
{
    try
    {
        if(((Boolean)r[0]) == true)
        {
            MailMassage ms = new MailMassage((string)r[1]);
            ms.SendMail();
        }
    }

我希望程序能够向datagrid中的每个邮件发送一封电子邮件,其中有一个复选复选框,感谢您的帮助。

c# wpf xaml datatable datagrid
2个回答
1
投票

CheckBox中的CellEditingTemplate绑定到Selected列:

<DataGridTemplateColumn Header ="send or not" Width="*">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Selected}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <CheckBox Name="CheckboxMail" IsChecked="{Binding Selected}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

0
投票

您正在绑定Text但未选中,因此您的检查不会传播到datarowview。

你应该将你的复选框的IsChecked绑定为

 <CheckBox IsChecked="{Binding Selected}"/>

您可能还需要,mode = TwoWay对该绑定。

© www.soinside.com 2019 - 2024. All rights reserved.