【问题标题】:Populating a Combobox inside a Gridview在 Gridview 中填充组合框
【发布时间】:2012-06-19 09:12:45
【问题描述】:

我在使用 gridview 和其中的组合框时遇到了一些问题。

这是我的 ListView 控件的代码:

<ListView Height="139" HorizontalAlignment="Left" Margin="10,158,0,0" Name="lvAppointment" VerticalAlignment="Top" Width="250" MinWidth="350">
<ListView.View>
    <GridView>
        <GridViewColumn Header="Appointment" Width="120">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <DatePicker SelectedDate="{Binding Path=Appointment}"/>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
        <GridViewColumn Header="Type" Width="170">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ???/>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
        <GridViewColumn Header="Done" Width="50">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox IsChecked="{Binding Path=Done}" IsThreeState="False"/>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
    </GridView>
</ListView.View>

我正在通过 c# 使用以下代码从 sql ce 数据库中填充列表

using (SqlCeCommand sqlCeAppointment = new SqlCeCommand("SELECT appid,appointment,done,apptype.type FROM appointment INNER JOIN apptype ON appointment.refatid = apptype.atid WHERE refeventid = @eventid;", sqlCeConn))
    {
        sqlCeAppointment.Parameters.AddWithValue("@eventid", ((cListEventItem)lvEvent.SelectedItems[0]).id);
        using (SqlCeDataReader sqlCeAppointmentReader = sqlCeAppointment.ExecuteReader())
        {
            lvAppointment.Items.Clear();

            while (sqlCeAppointmentReader.Read())
            {
                lvAppointment.Items.Add(new cListAppointmentItem { id = sqlCeAppointmentReader.GetGuid(sqlCeTerminReader.GetOrdinal("appid")), Appointment = sqlCeAppointmentReader.GetDateTime(sqlCeTerminReader.GetOrdinal("appointment")), Type = sqlCeAppointmentReader.GetString(sqlCeTerminReader.GetOrdinal("type")), Done = sqlCeAppointmentReader.GetByte(sqlCeTerminReader.GetOrdinal("done")) });
            }
        }
    }

我可以很好地填充列表。但我希望“类型”成为一个组合框,以便用户可以选择约会的适当类型(它是连接到事件的约会列表)。此组合框应填充 sql ce 数据库 (apptype) 表中的数据。此表不是静态的,用户可以在此列表中添加和删除项目。

我尝试了几种通过谷歌找到的方法,但都失败了。我想我在理解这是如何工作/应该如何工作时遇到问题。

希望有人能帮帮我:(

提前致谢

【问题讨论】:

    标签: c# wpf listview gridview combobox


    【解决方案1】:

    我建议获取 MainViewModel 上的约会类型列表。然后将ComboBoxItemsSource 绑定到该List 并将SelectedItem 绑定到AppointmentItem 类型。

    <UserControl x:Name="TheUserControl">
        <ListView>
            <GridView>
                <GridViewColumn Header="Type" Width="170">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding ElementName=TheUserControl, Path=AppointmentTypes}"
                                      SelectedItem="{Binding Path=Type}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView>
    </UserControl>
    

    【讨论】:

      【解决方案2】:

      您可以通过定义 ObservableCollection 类型的属性来实现。 如果集合的数据类型是字符串,那么可以定义为:

        public ObservableCollection<string> Types
              {
                  get
                  {
                      ObservableCollection<string> _types = new ObservableCollection<string>();
                      _types.Add("value1");
                      _types.Add("value2");
                      _types.Add("value3");
                      return _types;
                  }
      
              }
      

      在您的 XAML 中,您可以将其绑定为:

       <ComboBox VerticalAlignment="Top"  HorizontalAlignment="Left" ItemsSource="{Binding Path=Types}" SelectedItem="{Binding MainViewModel.Type,Mode=TwoWay}" SelectedValue="{Binding SelectedValue}"  Width="300"  ></ComboBox>
      

      【讨论】:

        猜你喜欢
        • 2011-12-03
        • 1970-01-01
        • 2013-06-22
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多