Ich hab es nun ganz anders gelöst. Ich zähle die Zeilen einfach selber. Das Data Binding scheint hier nicht korrekt zu funktionieren, da auch hier eine Änderung der Zeilen nicht an das andere Objekt gemeldet wird.
Danke, du hast mir gezeigt wo ich suchen muss. Ich habe bereits einen Konverter, der mit allem, was ich gerade brauchen sollte umgehen können. Zumindest habe ich das gedacht, bis ich gesehen habe, dass der Fehler nur dann auftritt, wenn in der Datenbank auf nullable-Columns nichts eingetragen ist. Das soll heissen, wenn statt DateTime sowas wie DBNull rauskommt.
Meine Casts werden zur Laufzeit in den Klassen mittels Reflection implementiert; ich habe die DBNull nicht gesehen. Nun schaut man in der MSDN:
http://msdn.microsoft.com/en-us/library/system.dbnull.aspx schrieb:
Explicit Interface Implementations
IConvertible.ToDateTime: Infrastructure. This conversion is not supported. Attempting to make this conversion throws an InvalidCastException.
Zu dumm nur, dass das in der Exception nicht ersichtlich wird.
Vielen Dank
Also ich hoffe das ist jetzt sauber, hatte einen kleinen Workaround über Guggle gefunden. Ein einfaches Beispiel:
In meiner "GUI : Form" Klasse definiere ich ein Objekt der Klasse GUIAccess, wo ich die Delegate und Events deklariere, die Methode die Veränderungen auf der GUI durchführt, und Abonniere das Event dazu:
GUIAccess Gu = new GUIAccess;
private void UpdateLabel(string Text)
{
this.label1.Text = Text;
}
Gu.UpdateLabelDelegateEvent += new Gu.UpdateLabelDelegate(UpdateLabel);
In meiner Klasse "GUIAccess" deklariere ich das Delegate, das Event, und die Methode die von dem anderen Thread aufgerufen wird, wenn das Event ausgelöst werden soll:
public delegate void UpdateLabelDelegate(string Text);
public event UpdateLabelDelegate UpdateLabelDelegateEvent;
public void EventAusloesen()
{
UpdateLabelDelegateEvent("Neuer Wert");
}
Danke erstmal für die Antwort, bisher habe ich für meine Probleme eine Lösung bzw. Antwort gefunden. Ich hab aber eine neue Frage.
Mittlerweile kann ich einen Button zu meiner Favoritenseite hinzufügen. Ich erstelle einen neuen Button in der entsprechenden TabPage und füge das Click-Ereigniss des Originalbuttons hinzu.
Das Problem ist logischerweiße, dass diese Buttons nicht gespeichert werden und ich sie jedesmal neu erstellen muss, wenn ich das Programm neustarte. Gibt es eine Möglichkeit die neuen Buttons zu speichern.
Ich hab mir selber schon überlegt, die Information der erstellen Buttons in einer Textdatei zu speichern und diese dann beim Programmstart wieder auszulesen, um die Buttons zu erstellen, weiß aber nicht genau wie ich das umsetzten soll.
MFG Peter7
Hallo,
wenn du die WinForms-TextBox meinst, dann gibt es die Methoden GetFirstCharIndexFromLine sowie GetLineFromCharIndex. Und die Länge einer Zeile kannst du mittels Lines[x].Length abfragen.
Ein Blick in die MSDN-Doku hätte es dir aber auch gesagt...
hallo leute, ich mal wieder^^
hat jemand erfahrung mit dbf files?, wie man die mittels c# oder vieleicht basic erzeugen kann??
hab was gelesen von odbc, habe aber damit noch nie wirklich gearbeitet :p
Hi Loks,
danke für die klasse Hilfe. Auch für die Überarbeitung meiner Event-Sicht =)...
Werd mich gleich mal dran setzen...
Mich würd dann noch interessieren, wann ists denn sinnvoll von
Froms, Conrol und wann von UserControl ab zu leiten um um sein Fenster in Teilklassen auf zu teilen ???
(Ich denke man merkt, C# und Forms sind sehr neu für mich ^^ )
Grüße
Dir ist hoffentlich klar, daß du auf diese Weise nur die Symptome bekämpft hast - dein eigentliches Problem besteht trotzdem noch, und das mußt du erstmal genauer untersuchen um herauszufinden wie es dazu gekommen ist.
Ich habe es geschafft Man muss einige Binding Source miteinander verketten und die Relationen als DataMember setzen, um das korrekte Verhalten zu erreichen.
Hier mein Code für die Nachwelt:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace Test
{
public partial class Form1 : Form
{
BindingSource bsKunde = new BindingSource();
BindingSource bsAuftrag = new BindingSource();
BindingSource bsLeistung = new BindingSource();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
InitData();
}
void InitData()
{
string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=../../Test.mdb";
using (OleDbConnection con = new OleDbConnection(strCon))
{
con.Open();
DataSet ds = new DataSet();
using (OleDbCommand selectCmd = new OleDbCommand("SELECT * FROM tbl_Kunde", con))
{
using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(selectCmd))
{
dataAdapter.Fill(ds, "Kunde");
}
}
using (OleDbCommand selectCmd = new OleDbCommand("SELECT * FROM tbl_Auftrag", con))
{
using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(selectCmd))
{
dataAdapter.Fill(ds, "Auftrag");
}
}
using (OleDbCommand selectCmd = new OleDbCommand("SELECT * FROM tbl_Leistung", con))
{
using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(selectCmd))
{
dataAdapter.Fill(ds, "Leistung");
}
}
ds.Relations.Add("RelAuftrag", ds.Tables["Kunde"].Columns["id_Kunde"], ds.Tables["Auftrag"].Columns["KundenNr"]);
ds.Relations.Add("RelLeistungen", ds.Tables["Auftrag"].Columns["id_Auftrag"], ds.Tables["Leistung"].Columns["AuftragNr"]);
bsKunde.DataSource = ds;
bsKunde.DataMember = "Kunde";
cbKunde.DataSource = bsKunde;
cbKunde.ValueMember = "id_Kunde";
cbKunde.DisplayMember = "Nachname";
txtVorname.DataBindings.Add("Text", bsKunde, "Vorname");
txtNachname.DataBindings.Add("Text", bsKunde, "Nachname");
bsAuftrag.DataSource = bsKunde;
bsAuftrag.DataMember = "RelAuftrag";
dgvAuftrag.DataSource = bsAuftrag;
bsLeistung.DataSource = bsAuftrag;
bsLeistung.DataMember = "RelLeistungen";
dgvLeistung.DataSource = bsLeistung;
con.Close();
}
}
private void txtFilter_TextChanged(object sender, EventArgs e)
{
bsLeistung.Filter = String.Format("Leistung LIKE '%{0}%'", txtFilter.Text);
}
}
}
Was ist ein schwarzer Rand? Deine Erläuterung ist in etwa gleich zu der im Eingangspost. Wenn du es nicht in Worten erklären kannst, dann mach doch allenfalls mal ein Bild davon und zeig uns, wo das Problem ist.
Grüssli
@icarus: Die Lösung hatte ich auch selber gefunden, da fehlten allerdings die führenden Nullen - ich will nicht "64", sondern "00000064".
@Conan: Danke, das war's was ich gesucht habe.
ok, ich habs gefunden:
for (int i = 0; i < chart1.ChartAreas.Count; i++)
{
while (chart1.ChartAreas[i].AxisX.ScaleView.IsZoomed)
{
chart1.ChartAreas[i].AxisX.ScaleView.ZoomReset();
}
while (chart1.ChartAreas[i].AxisY.ScaleView.IsZoomed)
{
chart1.ChartAreas[i].AxisY.ScaleView.ZoomReset();
}
}
Ich versuch eine Spalte in einem WPD DataGrid auszublenden indem ich die Visibility auf eine CheckBox binde. Das klappt aber nicht und ich bin etwas ratlos warum. Dieselbe Bindung auf das Komplette Grid angewandt funktioniert jedenfalls, nur nicht auf die Spalten.
Beispiel:
<convert:BooleanToVisibilityConverter x:Key="boolToVis" />
...
<Grid Width="auto" Height="auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition />
</Grid.RowDefinitions>
<CheckBox x:Name="advancedView" IsChecked="True" Content="show" Grid.Row="0"/>
...
<DataGrid Name="dataGrid">
<DataGrid.Columns>
<DataGridTextColumn Header="Spalte" Binding="{Binding Path=Context}" Visibility="{Binding IsChecked, ElementName=advancedView, Converter={StaticResource boolToVis}}"/>
...
Habt ihr ne Idee worans lieegen könnte?