Laden...

Zwei Datagrid ein einem Fenster

Erstellt von WhiteBandit vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.109 Views
W
WhiteBandit Themenstarter:in
33 Beiträge seit 2008
vor 15 Jahren
Zwei Datagrid ein einem Fenster

Hallo zusammen!

Ich stehe mal wieder vor einem Rätsel, und hoffe Ihr könnt mir helfen.
Meine Anwendung soll über zwei Datagrids in einem Fenster verfügen.
So weit so gut. Das funktioniert auch total super. So nun kommt aber erschwerent hinzu, dass ein zweites Datagrid gefüllt werden soll.
Wie gehe ich damit um?

Beipiel für das Füllen des ersten DATAGRID


Namensraum für das XAML
    xmlns:dg ="http://schemas.microsoft.com/wpf/2008/toolkit"
    xmlns:data="clr-namespace:Test"

XAML Code
        <dg:DataGrid Name="dg" ItemsSource="{Binding}" AutoGenerateColumns="True" Background="Black" RowBackground="Black"
                    SelectionUnit="FullRow" IsReadOnly="True" Margin="0,219,5,12" Foreground="Orange" HorizontalAlignment="Right" Width="292.193">

und hiermit fülle ich das Binding.
Das Objekt oLesen.Datagrid(strSQL, strDBOrt) ist einfach ein gefülltes Dataset von mir.


            private void dgUeber_fuellen()
            {
                string strSQL = "select * from tabKunde";
                SqlCeDataAdapter reader = oLesen.Datagrid(strSQL, strDBOrt);
                DataSet ds = new DataSet();
                reader.Fill(ds);
                this.DataContext = ds.Tables[0];
            }

Wie stelle ich es nun an, ein zweites DATAGRID zu füllen?

Der frühe Vogel fängt den Wurm

Gruß
WhiteBandit

3.430 Beiträge seit 2007
vor 15 Jahren

Hallo WhiteBandit,

das kannst du machen in dem du einfach die ItemSource via C#-Code setzst.
Also so z.B.


private void myFillMethod()
{
   dataGrid1.ItemSource = ds.Tables[0];
   dataGrid2.ItemSource = ds.Tables[1];
}

So funktioniert das Ganze ohne Probleme.
Es würde auch über DataBinding gehen, wobei das jetzt wohl die einfachste Lösung des Problems ist.

Gruss
Michael

W
WhiteBandit Themenstarter:in
33 Beiträge seit 2008
vor 15 Jahren

Hi und guten Morgen!
Tut mir leid, das funktioniert leider so nicht. Ich erhalte die Fehlermeldung

Der Typ "System.Data.DataTable" kann nicht implizit in "System.Collections.IEnumerable" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)

Darauf hin bin ich hingegangen, und habe folgendes gemacht,


dg.ItemsSource =(System.Collections.IEnumerable) ds.Tables[0];

Dann kann ich zwar die Anwendung starten aber sobald diese Codzeile berührt wird, erscheint folgende Meldung.

Das Objekt des Typs "System.Data.DataTable" kann nicht in Typ "System.Collections.IEnumerable" umgewandelt werden.

Was mache ich Falsch?

Der frühe Vogel fängt den Wurm

Gruß
WhiteBandit

1.433 Beiträge seit 2006
vor 15 Jahren

Verwendest du das DataGrid aus dem WPFToolKit?

Also ich hab's mit Entity FrameWork gemacht und mit LinQ.

Als Beispiel CodeBehind:


        private void btnSearch_Click(object sender, RoutedEventArgs e) {
            Entities entities = new Entities();

            //ObjectQuery<Account> accountQuery = entities.Account.Where(entities.Account.Equals(txtAccountSam.Text));

            var result = (from AccountEntry in entities.Account where AccountEntry.Sam.Contains(txtAccountSam.Text) select AccountEntry);
            ResultGrid.ItemsSource = result;
        }

Und nachfolgend der XAML Code


<Window x:Class="Buraut.Ais.WpfVersion.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:dg="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
    Title="PersonAccountSearch" Height="300" Width="600">
    <Grid x:Name="PersonAccountSearchGrid" ShowGridLines="True" Height="280" Width="580" HorizontalAlignment="Center">
        <Grid.RowDefinitions>
            <RowDefinition Height="120"></RowDefinition>
            <RowDefinition Height="160"></RowDefinition>
        </Grid.RowDefinitions>
        <StackPanel x:Name="RightPanel" Width="290" Height="120" HorizontalAlignment="Left" Grid.Row="0">
            <TextBlock x:Name="AccountSam" Text="Account to look for:" Margin="5,5,5,5"></TextBlock>
            <TextBlock x:Name="PersonFirstName" Text="Person to look for (FirstName):" Margin="5,5,5,5"></TextBlock>
            <TextBlock x:Name="PersonLastName" Text="Person to look for (LastName):" Margin="5,5,5,5"></TextBlock>
        </StackPanel>
        <StackPanel x:Name="LeftPanel" Width="290" Height="120" HorizontalAlignment="Right" Grid.Row="0">
            <TextBox x:Name="txtAccountSam" Width="Auto" Margin="5,5,5,5"></TextBox>
            <TextBox x:Name="txtPersonFirstName" Width="Auto" Margin="5,5,5,5"></TextBox>
            <TextBox x:Name="txtPersonLastName" Width="Auto" Margin="5,5,5,5"></TextBox>
            <Button x:Name="btnSearch" Width="100" Height="20" Margin="5,5,5,5" Content="Look for Person" Click="btnSearch_Click"></Button>
        </StackPanel>
        <StackPanel x:Name="StackPanelResults" Width="Auto" Height="Auto" Margin="5,5,5,5" Grid.Row="1">
            <dg:DataGrid x:Name="ResultGrid" AutoGenerateColumns="True" Width="Auto" Height="Auto" Margin="5,5,5,5">
            </dg:DataGrid>                   
        </StackPanel>
    </Grid>
</Window>

Bei mir werden die Columns generiert und auch das Resultat angezeigt.

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

W
WhiteBandit Themenstarter:in
33 Beiträge seit 2008
vor 15 Jahren

Hi und hallo!
Sorry das ich mich jetzt erst melde aber ging leider nicht vorher.
Ich habe es mal ausprobiert und kriege es so nicht hin. Ich muß zu meiner Schande gestehen, ich habe auch keinen blassen Schimmer von LinQ.

Hätte vielleicht einer noch einen Tip in Richtung Binding. Da habe ich zwar auch nciht so umbedingt den großen Durchblick, aber ich arbeite mich gerade in die Materie ein.

Der frühe Vogel fängt den Wurm

Gruß
WhiteBandit

1.433 Beiträge seit 2006
vor 15 Jahren

Übersicht über Datenbindung

Denke der sollte noch aktuell sein:
Windows Presentation Foundation Data Binding: Part 2

Der DataContext und nicht ItemsSource ist für das Binden von Tabellen geeignet.

Nachstehend habe ich Dir noch ein Beispiel mit 2 DataTables in einem DataSet (School.db kannst Du bei Microsoft oder Codeplex downloaded).

Hier das Codebehind:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Thread.Number67007.DataSets.TestDataSetTableAdapters;
using System.Data;

namespace Thread.Number67007
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            GetCourse();
            GetDepartment();

        }

        private void GetCourse()
        {
            CourseTableAdapter adapter = new CourseTableAdapter();
            DataGrid_Right.DataContext = adapter.GetData();
        }

        private void GetDepartment()
        {
            DepartmentTableAdapter adapter = new DepartmentTableAdapter();
            DataGrid_left.DataContext = adapter.GetData();
        }
    }
}

Hier noch das XAML


<Window x:Class="Thread.Number67007.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:dg="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
    Title="MyCsharp.Thread.67007" Height="365" Width="534">
    <Grid>
        <StackPanel x:Name="Stackpanel_Right" Margin="0,5,0,0" Background="Azure" Height="159" VerticalAlignment="Top">
            <dg:DataGrid x:Name="DataGrid_Right" AutoGenerateColumns="True" ItemsSource="{Binding}"></dg:DataGrid>
        </StackPanel>
        <StackPanel x:Name="StackPanel_Left" Margin="0,0,0,5" Background="BlanchedAlmond" Height="159" VerticalAlignment="Bottom">
            <dg:DataGrid x:Name="DataGrid_left" AutoGenerateColumns="True" ItemsSource="{Binding}"></dg:DataGrid>
        </StackPanel>
    </Grid>
</Window>

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt