Zapis daty do MySQL przez DataGridView, wyjątek

0

Wyświetlam tabelę w DataGridView i zezwalam użytkownikowi na edycję. Działa wszystko poza polami typu DATE. Przy modyfikacji/dodawaniu takiego pola wyrzuca mi wyjątek jak poniżej:

The following exception occurred in the DataGridView:

System.FormatException: Invalid cast from 'System.String' to 'MySql.Data.Types.MySqlDateTime'. ---> System.InvalidCastException: Invalid cast from 'System.String' to 'MySql.Data.Types.MySqlDateTime'.
[... tu dalszy stos wywoływanych metod ...]

Jedyna strona traktująca o tym błędzie, jaką znalazłem, to http://bugs.mysql.com/bug.php?id=10345, jednak brak tam rozwiązania problemu.

Jam mam zmusić DataGridView by dało się wstawiać/modyfikować daty w tabelach? To mi trochę pomieszało plany w magisterce ;)

[dopisane]
Ach, korzystam z providera mysql-connector-net-1.0.9
Dane uaktualniam przez DataAdaptor.Update(DataTable) powiązane z DataGridView.

0

DateTime.Parse( "1992-05-01" );

0

Ale w którym miejscu?
Kod uaktualniający dane w tabeli to jedna linijka

mySqlDataAdapter.Update(mySqlTableEdit);

Jednak do niego nawet nie dochodzi! Błąd pojawia się tuż po wpisaniu daty w DataGridView zanim jakikolwiek mój kod zostanie wykonany :/

0

A w jakim formacie wpisujesz datę do DataGridView?

0

Tak wygląda przypisanie danych do DataGridView (zmienna dgvEditTable):

string strSQL = "select * from " + cbEditTable.SelectedItem.ToString();

mySqlDataAdapter = new MySqlDataAdapter(strSQL, MySQLConnection.ConnectionString + ";allow zero datetime=yes");
MySqlCommandBuilder commandBuilder = new MySqlCommandBuilder(mySqlDataAdapter);

// Populate a new data table and bind it to the BindingSource.
mySqlTableEdit = new DataTable();
mySqlTableEdit.Locale = System.Globalization.CultureInfo.InvariantCulture;
mySqlDataAdapter.Fill(mySqlTableEdit);

BindingSource dbBindSource = new BindingSource();
dbBindSource.DataSource = mySqlTableEdit;
dgvEditTable.DataSource = dbBindSource;
0

To może jakiś inny sposób obsługi DataGridView? Jakoś muszę je wyświetlić i umożliwić ich edycję - a data jest istotnym polem :/

0

To sprobuj obsluzyc zdarzenia edycji komorek i aktualizacji. W trakcie edycji parsowalbys recznie tekst do daty i wpisywal juz poprawnie do 'wartosci komorki'. Zdarzenie aktualizacji moze nie byc konieczne - nie sprawdzalem.

0

Spróbowałem jak piszesz:

        private void dgvEditTable_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
        {
            e.Value = DateTime.Parse(e.Value.ToString());
            e.ParsingApplied = true;
        }

ale nadal wyrzuca ten sam błąd.

W pierwszym poście jest link do strony o MySql - na końcu koleś pisze, że można zmienić po prostu typ kolumny na String i to rozwiązuje problem. Niestety, mogę to zrobić dopiero po załadowaniu danych z bazy, a wtedy zmiana typu kończy się wyjątkiem:

Cannot change DataType of a column once it has data.

Jakieś inne pomysły? Jakoś muszę to zrobić :/

0

A moze przy pobieraniu dawaj select date_format(...), zeby pobieralo jako stringa, a przy updatetowaniu update tabela set str_to_date(...). A kolumny jako string...

0

Problem polega na tym, że w tym DataGridView wyświetlam różne tabele. Wybór tabeli z ComboBox, który jest generowany automagicznie. Tak więc nie mogę na stałe przypisać która kolumna będzie akurat miała typ Date czy DateTime :/
Ciężka sprawa... sakreble.

0

To moze zasadz na serwerze procedury/widoki? Chociaz z widokiem pewnie bedzie ten sam problem. Ale z procedura juz by sie moglo udac. Dla kazdej tabeli osobna procedura (wiem, nie brzmi najlepiej :) ) i moze by zahulalo? Innych pomyslow brak...

0

MySQL MYISAM w wersji 4.x nie ma czegoś takiego niestety. To nawet nie jest baza danych [brak relacji!] ino szybki parser tekstu :D
A niestety, baza została mi narzucona...

1 użytkowników online, w tym zalogowanych: 0, gości: 1