1
<Window x:Class="Kvik_Support.KonsulentValg"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="KonsulentValg" Height="150" Width="250"
        Background="LightGray" ResizeMode="NoResize">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="10" />
            <ColumnDefinition Width="10*" />
            <ColumnDefinition Width="10" />
            </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="10" />
            <RowDefinition Height="10*" />
            <RowDefinition Height="10*" />
            <RowDefinition Height="10*" />
            <RowDefinition Height="10" />
        </Grid.RowDefinitions>
        <Label Content="Hvem er du?" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
        <ComboBox Grid.Column="1" Grid.Row="2" Height="25" Name="cmbHvemErDu">

        </ComboBox>
        <Button Grid.Column="1" Grid.Row="3" Height="25" Width="100" Content="OK" Click="Button_Click" />
    </Grid>
</Window>

これは私のウィンドウの XAML コードで、コンボボックスにデータベースの項目を入力しようとしています...

私が考えたのは、次のコードで項目を埋めることができるということでしたが、それは XAML 解析の例外になります...

   public partial class KonsulentValg : Window
    {
        public KonsulentValg()
        {
            InitializeComponent();
            try
            {
                SqlConnection lager = new SqlConnection("Data Source=local\\SERVER;Initial Catalog=Kvik-Support;Integrated Security=True");
                lager.Open();
                SqlCommand thisCommand = lager.CreateCommand();
                string command = "SELECT ID, navn FROM Konsulent";
                SqlDataAdapter da = new SqlDataAdapter(command, lager);
                SqlDataReader thisReader = thisCommand.ExecuteReader();
                DataTable datatable = new DataTable();
                da.Fill(datatable);
                foreach (DataRow row in datatable.Rows)
                {
                    string rows = string.Format("{0}:{1}", row.ItemArray[0], row.ItemArray[1]);
                    cmbHvemErDu.Items.Add(rows);
                }
                Console.ReadKey();
                thisReader.Close();
                lager.Close();
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Close();
        }
    }
}

しかし、それはおそらくうまくいきませんでした...

4

1 に答える 1

1

アイテムをコンボボックスに追加する代わりに、アイテムソースのバインドを使用することを検討する必要があります。

  this.cmdHvemErDu.ItemsSource = datatable;

またはxamlで

  <ComboBox ItemsSource="{Binding YourDataTableProperty}"/>

コンボボックスの DisplayMemeberPath プロパティを設定することを忘れないでください

編集: コンボボックスに複数の列の値を表示する場合は、ItemTemplate を使用できます。

    <ComboBox ItemsSource="{Binding YourDataTablePropertyHere}" >
        <ComboBox.ItemTemplate>
            <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding ColumnName1}" />
                        <TextBlock Text="{Binding ColumnName2}" />
                    </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>
于 2012-04-27T07:41:56.047 に答える