... hier hab ich das DataGrid mit Bindings.
<DataGrid x:Name="DGV01" Margin="10,10,10,70" AlternatingRowBackground="LightGray" AlternationCount="2" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding AUF_NR}" Width="60" Header="Proj.-Nr." />
<DataGridTextColumn Binding="{Binding AUF_LIEFERTERMIN, StringFormat=\{0:dd.MM.yy\}}" Width="75" Header="Liefertermin" />
<DataGridTextColumn Binding="{Binding AUF_PLAN_STUNDEN}" Width="80" Header="Planstunden">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="LightGreen"/>
<Style.Triggers>
<DataTrigger Binding="{Binding AUF_PLAN_STUNDEN}" Value="{x:Null}">
<Setter Property="Background" Value="IndianRed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding AV.RP_NEED}" Width="60" Header="AV" />
<DataGridTextColumn Binding="{Binding PROD.RP_NEED}" Width="60" Header="PROD" />
<DataGridTextColumn Binding="{Binding MONT.RP_NEED}" Width="60" Header="MONT" />
<!--<DataGridTextColumn Width="60" Header="AV" />
<DataGridTextColumn Width="60" Header="PROD" />
<DataGridTextColumn Width="60" Header="MONT" />-->
</DataGrid.Columns>
</DataGrid>
... hier ist der Aufruf.
private void Butdata_Click(object sender, RoutedEventArgs e)
{
try
{
string ConString = ConfigurationManager.ConnectionStrings["ConScharlau"].ConnectionString;
string CmdString = string.Empty;
using (SqlConnection con = new SqlConnection(ConString))
{
CmdString = "select " +
"AUF_STAMM.AUF_NR, AUF_STAMM.AUF_LIEFERTERMIN, AUF_STAMM.AUF_PLAN_STUNDEN, " +
"AV.RP_NEED, PROD.RP_NEED, MONT.RP_NEED " +
"from " +
"PRO_STAMM inner join " +
"AUF_STAMM on PRO_STAMM.PROJEKT_ID = AUF_STAMM.PROJEKT_ID left join " +
"ADR_STAMM on AUF_STAMM.ADR_ID = ADR_STAMM.ADR_ID left join " +
"RP_PROJECTS on RP_PROJECTS.AUF_ID = AUF_STAMM.AUF_ID left join " +
"RP_PROJECT_DATA AV on AV.RP_PROJECT_ID = RP_PROJECTS.RP_PROJECT_ID and AV.RP_OPERATION = 'AV' left join " +
"RP_PROJECT_DATA PROD on PROD.RP_PROJECT_ID = RP_PROJECTS.RP_PROJECT_ID and PROD.RP_OPERATION = 'PROD' left join " +
"RP_PROJECT_DATA MONT on MONT.RP_PROJECT_ID = RP_PROJECTS.RP_PROJECT_ID and MONT.RP_OPERATION = 'MONT' " +
"where " +
"PRO_STAMM.PRO_STATUS_ID = 1 and " +
"PRO_STAMM.PRO_ART_ID = 1 and " +
"AUF_STAMM.AUF_POS = '999' " +
"order by " +
"AUF_POS ";
SqlCommand cmd = new SqlCommand(CmdString, con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
DGV01.ItemsSource = dt.DefaultView;
//int num=DGV01.Items.Count;
LB_DGV.Visibility = Visibility.Visible;
LB_DGVCount.Visibility = Visibility.Visible;
LB_DGVCount.Content = DGV01.Items.Count -1;
}
}
catch (Exception)
{
}
}
... oder was verstehe ich da nicht, was du meinst?
Die Spalten - Überschriften schreibe ich ja schon in der xaml, daher würde ich erwarten, dass das z.B. as AV nicht benötigt wird.
Aber selbst mit as AV etc. kommen die Werte für AV / PROD / MONT nicht?
Ich dachte, das die SQL - Abfrage an sich ziemlich / gleich lauten.
Was ist denn dann da falsch?
Hallo Zusammen,
jetzt habe ich doch noch ein Problem, im SQL Server Management Studio funktioniert das prima, nur leider nicht in meinem c# Programm.
SSMS:
select
AUF_STAMM.AUF_NR as ProjNr, AUF_STAMM.AUF_LIEFERTERMIN as Liefertermin, AUF_STAMM.AUF_PLAN_STUNDEN as Planstunden,
AV .RP_NEED as AV, PROD.RP_NEED as PROD, MONT.RP_NEED as MONT
from
PRO_STAMM inner join
AUF_STAMM on PRO_STAMM.PROJEKT_ID = AUF_STAMM.PROJEKT_ID left join
ADR_STAMM on AUF_STAMM.ADR_ID = ADR_STAMM.ADR_ID left join
RP_PROJECTS on RP_PROJECTS.AUF_ID = AUF_STAMM.AUF_ID left join
RP_PROJECT_DATA AV on AV.RP_PROJECT_ID = RP_PROJECTS.RP_PROJECT_ID and AV.RP_OPERATION = 'AV' left join
RP_PROJECT_DATA PROD on PROD.RP_PROJECT_ID = RP_PROJECTS.RP_PROJECT_ID and PROD.RP_OPERATION = 'PROD' left join
RP_PROJECT_DATA MONT on MONT.RP_PROJECT_ID = RP_PROJECTS.RP_PROJECT_ID and MONT.RP_OPERATION = 'MONT'
where
PRO_STAMM.PRO_STATUS_ID = 1 and
PRO_STAMM.PRO_ART_ID = 1 and
AUF_STAMM.AUF_POS = '999'
order by
AUF_POS
c#
CmdString = "select " +
"AUF_STAMM.AUF_NR, AUF_STAMM.AUF_LIEFERTERMIN, AUF_STAMM.AUF_PLAN_STUNDEN, " +
"AV.RP_NEED, PROD.RP_NEED, MONT.RP_NEED " +
"from " +
"PRO_STAMM inner join " +
"AUF_STAMM on PRO_STAMM.PROJEKT_ID = AUF_STAMM.PROJEKT_ID left join " +
"ADR_STAMM on AUF_STAMM.ADR_ID = ADR_STAMM.ADR_ID left join " +
"RP_PROJECTS on RP_PROJECTS.AUF_ID = AUF_STAMM.AUF_ID left join " +
"RP_PROJECT_DATA AV on AV.RP_PROJECT_ID = RP_PROJECTS.RP_PROJECT_ID and AV.RP_OPERATION = 'AV' left join " +
"RP_PROJECT_DATA PROD on PROD.RP_PROJECT_ID = RP_PROJECTS.RP_PROJECT_ID and PROD.RP_OPERATION = 'PROD' left join " +
"RP_PROJECT_DATA MONT on MONT.RP_PROJECT_ID = RP_PROJECTS.RP_PROJECT_ID and MONT.RP_OPERATION = 'MONT' " +
"where " +
"PRO_STAMM.PRO_STATUS_ID = 1 and " +
"PRO_STAMM.PRO_ART_ID = 1 and " +
"AUF_STAMM.AUF_POS = '999' " +
"order by " +
"AUF_POS ";
<DataGrid x:Name="DGV01" Margin="10,10,10,70" AlternatingRowBackground="LightGray" AlternationCount="2" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding AUF_NR}" Width="60" Header="Proj.-Nr." />
<DataGridTextColumn Binding="{Binding AUF_LIEFERTERMIN, StringFormat=\{0:dd.MM.yy\}}" Width="75" Header="Liefertermin" />
<DataGridTextColumn Binding="{Binding AUF_PLAN_STUNDEN}" Width="80" Header="Planstunden">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="LightGreen"/>
<Style.Triggers>
<DataTrigger Binding="{Binding AUF_PLAN_STUNDEN}" Value="{x:Null}">
<Setter Property="Background" Value="IndianRed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding AV}" Width="60" Header="AV" />
<DataGridTextColumn Binding="{Binding PROD}" Width="60" Header="PROD" />
<DataGridTextColumn Binding="{Binding MONT}" Width="60" Header="MONT" />
</DataGrid.Columns>
</DataGrid>
Woran liegt das nun?
Besten Dank für weitere Hilfe.
Hallo Zusammen,
vielen Dank für die Infos.
@BlonderHans
So funktioniert es prima, danke.
select RP_PROJECTS.RP_PROJECT_ID as ID, AV.RP_NEED as AV, PROD.RP_NEED as PROD, MONT.RP_NEED as MONT
from RP_PROJECTS
left join RP_PROJECT_DATA AV on AV.RP_PROJECT_ID = RP_PROJECTS.RP_PROJECT_ID and AV.RP_OPERATION = 'AV'
left join RP_PROJECT_DATA PROD on PROD.RP_PROJECT_ID = RP_PROJECTS.RP_PROJECT_ID and PROD.RP_OPERATION = 'PROD'
left join RP_PROJECT_DATA MONT on MONT.RP_PROJECT_ID = RP_PROJECTS.RP_PROJECT_ID and MONT.RP_OPERATION = 'MONT'
Hallo,
mein eigentliches Programm erstelle ich mit Visual Studio C#.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add connectionString="Data Source=XXXXX;Initial Catalog=XXXXX;User ID=XX;Password=XXXXX" name="ConXXX" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
Testen, wie ich an die unterschiedlichen Wert komme, mache ich im SQL Server Management Studio.
In der Tabelle RP_PROJECT_DATA gibt es eine Spalte RP_PROJECT_ID in der eine Projekt ID steht. Zu dieser Projekt ID gibt es dann jeweils 3 Zeilen. Unter der Spalte RP_OPERATION steht dann AV, PROD und MONT, Dazu gibt es dann in der Spalte RP_NEED jeweils einen Wert. Ich möchte nun diese 3 Zeilen in einer Zeile auslesen , siehe Bildanlage (Bild02).
... RP_NEED as AV, RP_NEED as PROD, RP_NEED as MONT
Das bekomme ich einfach nicht hin.
Select RP_NEED as AV, RP_NEED as PROD, RP_NEED as MONT
From RP_PROJECT_DATA
Where RP_OPERATION = 'AV' and
RP_OPERATION = 'PROD' and
RP_OPERATION = 'MONT'
Hallo Zusammen,
ich möchte gern aus einer SQL - Tabelle bestimmte Zeilen als String nach C# (Datagrid) ausgeben, habe aber keine Idee, wie ich diese Zeilen
AV
PROD
MONT
als String bekomme .... AV / PROD / MONT
select RP_PROJECT_ID, RP_REIHENFOLGE, RP_UNIQUE_ID, RP_OPERATION,RESOURCE_ID, RP_NEED
from RP_PROJECT_DATA
Für Hilfe wäre ich sehr dankbar.
Gruß
Dirk
... vielen Dank, werde ich die Tage testen, jetzt erst einmal einige Tage Urlaub.
Vielen Dank auch für die Infos und Links.
Beste Grüße Dirk
Hallo,
vielen Dank für die rasche Rückmeldung.
MySheets.Range["A3"].Offset[j, k].Value = DGV01.Items[j][k].ToString();
Hiermit bekomme ich aber eine Fehlermeldung.
Die Links schaue ich mir an.
Gruß
Dirk
Hallo,
vielen Dank für die rasche Rückmeldung.
MySheets.Range["A3"].Offset[j, k].Value = DGV01.Items[j][k].ToString();
Hiermit bekomme ich aber eine Fehlermeldung.
Die Links schaue ich mir an.
Gruß
Dirk
Hallo Zusammen,
ich beschäftige mich gerade mit C# / WPF / DataGrid und möchte den Inhalt des DataGrid nach Excel exportieren.
Das DataGrid befülle ich aus einer SQL - Datenbank.
Obwohl ich schon so einiges aus dem WWW ausprobiert habe, bekomme ich es nicht hin, das die Zeilen aus dem DataGrid nach Excel geschrieben werden.
Kann mir dabei jemand weiterhelfen, besten Dank?
<DataGrid x:Name="DGV01" Margin="10,10,10,70" AlternatingRowBackground="LightGray" AlternationCount="2" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding AUF_NR}" Width="60" Header="Proj.-Nr." />
<DataGridTextColumn Binding="{Binding AUF_LIEFERTERMIN, StringFormat=\{0:dd.MM.yy\}}" Width="75" Header="Liefertermin" />
</DataGrid.Columns>
</DataGrid>
private void ButExcel_Click(object sender, RoutedEventArgs e) //, object Exceltabelle)
{
Excel.Application MyExcel = new Excel.Application();
MyExcel.Visible = true;
Workbook MyWorkbook = MyExcel.Workbooks.Add(System.Reflection.Missing.Value);
Worksheet MySheets = (Worksheet)MyWorkbook.Sheets[1];
MyWorkbook.Activate();
//Header row
for (int i = 0; i < DGV01.Columns.Count; i++)
{
MySheets.Range["A2"].Offset[0, i].Value = DGV01.Columns[i].Header;
}
//Rows
for (int j = 0; j < DGV01.Items.Count; j++)
{
for (int k = 0; k < DGV01.Columns.Count; k++)
{
MySheets.Range["A3"].Offset[j, k].Value = DGV01.Items[j].ToString();
//MySheets.Range["A3"].Offset[j].Resize[1, k].Value = DGV01.Items[j].ToString();
}
}
}