【问题标题】:C# Save Combobox value and use in sql to display grouped dataC# 保存 Combobox 值并在 sql 中使用以显示分组数据
【发布时间】:2017-08-08 10:59:41
【问题描述】:

这是我的 ComboBox 在 xaml 文件中的代码:

<telerik:RadComboBox Grid.Row="3" Grid.Column="1" VerticalAlignment="Center" telerik:TextSearch.TextPath="Name" Margin="0 0 10 0"
            IsEditable="True" ItemsSource="{Binding AvailableFunds}"
                             DisplayMemberPath="Perioada"
                        SelectedValuePath="Perioada" 
                                SelectedValue="{Binding Path=Perioada}" 
                             SelectedIndex="0" 
            SelectionBoxTemplate="{StaticResource ComboBoxSimpleTemplate}" SelectionChanged="RadComboBox_SelectionChanged"/>

组合框显示一些日期(年和月),客户可以在其中选择一个。然后,我需要在列表视图中显示所选期间的所有日期:

<ListView Grid.Row="4" Grid.Column="1" ItemsSource="{Binding SalesGroupedByPartners}" Margin="0,0,10,0" ScrollViewer.HorizontalScrollBarVisibility="Auto">
            <ListView.View>
                <GridView >
                    <GridViewColumn Header="Perioada" Width="100" DisplayMemberBinding="{Binding Path=Perioada}"/>
                    <GridViewColumn Header="Nume Client" Width="300" DisplayMemberBinding="{Binding Path=Client}"/>
                    <GridViewColumn Width="120" Header="Suma">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Width="120" TextAlignment="Right" Text="{Binding Path=Suma, StringFormat=N2}" Margin="-6,0" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>

在 .cs 文件中我有一个空方法:

private void RadComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { }

我尝试在此方法中创建一个字符串并保存我的 ComboBox 的结果,但无法访问它,因为我的 ComboBox 没有名称 ( )。

或者,我可以将选择直接发送到 sql 文件....:

声明@Period set @Period = client choise (这里我不知道从ComboBox调用)

并在 ListView 中显示:

从表中选择 * 其中期间 = @Period

【问题讨论】:

  • 我尝试在此方法中创建一个字符串并保存我的 ComboBox 的结果,但无法访问它,因为我的 ComboBox 没有名称 ( )。 你不要'当您使用 MVVM 模式和绑定时不需要名称,就像您已经使用的那样;) 属性中的值不是 Perioada 吗?
  • Perioada 只是 .sql 文件中显示所有日期的列。根据此选择,新的 .sql 查询需要有一行“其中 Period = @Period(客户端选择的期间)和 d
  • 这就是为什么当你将数据库对象绑定到你的视图时这是一个糟糕的模式。您应该使用视图模型并绑定它们的属性。那么从ComboBox或任何其他控件中获取值就不成问题了。

标签: wpf listview combobox designer


【解决方案1】:

我尝试在此方法中创建一个字符串并保存我的 ComboBox 的结果,但无法访问它,因为我的 ComboBox 没有名称 ( )。

您可以通过在事件处理程序中转换 sender 参数来获得对 RadComboBox 的引用:

private void RadComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Telerik.Windows.Controls.RadComboBox comboBox = sender as Telerik.Windows.Controls.RadComboBox;
    object value = comboBox.SelectedValue;
    //...
}

但由于您绑定到Perioada 属性,您还可以从该属性中检索当前选定的值。

【讨论】:

  • 错误 1 ​​找不到类型或命名空间名称“RadComboBox”(您是否缺少 using 指令或程序集引用?)真的,我需要一个名为我的 ComboBox 的命名空间吗? :|
  • 在代码文件顶部添加以下 using 语句,或根据我编辑的答案使用完全限定名称:using Telerik.Windows.Controls;
【解决方案2】:

解决了:D

在 xaml.cs 文件中需要添加一些代码:

    cn.Open();

            SqlCommand cmd = new SqlCommand(Properties.Resources.SalesGroupedByPartners, cn);
            cmd.CommandType = CommandType.Text;
            cmd.CommandTimeout = 100;
            cmd.Parameters.AddWithValue("@Perioada", Perioada);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(salesGroupedByPartners);

            cn.Close();

var negativeRows = new List<SalesGroupedByPartners>();

        foreach (var v in viewModel.SalesGroupedByPartners)
        {
            if (v.Perioada == "@Perioada")
            {
                negativeRows.Add(v);
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多