Import z pliku *.xls, obrobienie i wklejenie do datagriedview

0

Mam taki problem mianowicie chcę sobie zrobić programik dla siebie do zaciągania inwestycji z *.xls. Podczas importu chcę by aplikacja sprawdziła czy dany numer inwestycji już znajduje się w bazie czy nie. Jeśli tak to pomija a jeśli nie znajdzie w bazie id o takiej inwestycji to doda wpis jako nowy wiersz do datagriedview. I tutaj w tym miejscu utknąłem... nie umiem sobie z tym poradzić próbowałem różnych sposób i jakoś nie mogę tego ogarnąć.... Ostatecznie ładowałem wszystko do tabeli i usuwałem wiersza ale też nie działa ;(
Z góry dziękuję za pomoc... Dopiero raczkuję w C# także wybaczcie ;)


private void button1_Click(object sender, EventArgs e)
        {
            {
                try
                {
                    OpenFileDialog openfile1 = new OpenFileDialog();
                    if (openfile1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        this.textBox1.Text = openfile1.FileName;


                        System.Data.OleDb.OleDbConnection MyConnection;
                        System.Data.DataSet DtSet;
                        System.Data.OleDb.OleDbDataAdapter MyCommand;
                        MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + textBox1.Text + ";Extended Properties=Excel 8.0;");
                        MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Inwestycje$]", MyConnection);
                        MyCommand.TableMappings.Add("Table", "TestTable");
                        DtSet = new System.Data.DataSet();
                        MyCommand.Fill(DtSet);
                        //dataGridView1.DataSource = DtSet.Tables[0];
                        int ile_wierszy = (DtSet.Tables[0].Rows.Count);
                        MessageBox.Show("wierszy importowanych: " + ile_wierszy.ToString());
                        int m = 1;
                        for (int i=0;i<ile_wierszy;i++)
                            {
                            int id_ki = Int32.Parse(DtSet.Tables[0].Rows[i][0].ToString());
                            

                            using (SqlConnection con = new SqlConnection())
                            {
                                con.ConnectionString = sConnectionString;
                                con.Open();
                                using (SqlCommand cmd = new SqlCommand("select * from Inwestycje_test WHERE Id_Ki=" + id_ki, con))
                            {
                                    using (SqlDataReader dr = cmd.ExecuteReader())
                                    {
                                        if (dr.HasRows)
                                        {
                                            while (dr.Read())
                                            {

                                                dataSet1.Tables[0].Rows[i].Delete();
                                                dataGridView1.DataSource = DtSet.Tables[0];

                                            }
                                        }
                                        else
                                        {
                                            
                                            MessageBox.Show("No record is found with this number >> " + id_ki.ToString());

                                       
                                        }
                                        
                                    }
                                }
                                
                                con.Close();

                            }

                        }
                        
                        MyConnection.Close();
                    }
                }
                catch
                {

                }

            }

        }

0

Zapisz sobie wyniki z XLS do tablicy, zaciagnij dane z bazy i sprawdzaj czy element o tym numerze inwestycji jest w bazie, jak nie to dodawaj do do bazy

0

Próbuję ale coś mi nie wychodzi... Mianowicie ładuję sobie do dwóch tabel dane w jednej mam zaimportowane pliki z xls jest 16 wierszy czyli pod DTSet a z bazy wyrzucam do dataSet1.
Poleceniem Select wyszukuję czy ID DTSet istnieje w dataSet1 Jeśli tak to ma wyświetlić "Jest" jeśli nie to wyświetli "Nie ma"
Problem w tym że wyświetla same "Jest" a tam gdzie nie znajduje w bazie wartości nie wykonuje dalej skryptu tylko jakby się wykrzaczał jak nie znajdzie pozycji...



for (int i = 0; i < ile_wierszy; i++)
                        {
                            string id_ki = (DtSet.Tables[0].Rows[i][0].ToString());

                            DataRow[] rows = dataSet1.Tables[0].Select("Id_Ki =" + id_ki);
                            string id_baza = (rows[0][0].ToString());

                          
                            if (id_ki == id_baza)
                            {
                                MessageBox.Show("Jest");
                            }
                            else
                            {
                                MessageBox.Show("Nie ma");
                            }
                        }

0

Zastosowałem try i cactch i poszło ;)

string id_ki = (DtSet.Tables[0].Rows[i][0].ToString());
                            try
                            {
                                DataRow[] rows = dataSet1.Tables[0].Select("Id_Ki =" + id_ki);
                                string id_baza = (rows[0][0].ToString());
                                MessageBox.Show("Jest" + id_baza.ToString());
                            }

                            catch
                            {
                                MessageBox.Show("Nie ma" + id_ki.ToString());
                            }

0

Mam takie pytanie jak w c# wyszukać dokładnie taką samą wartość i potem zamienić...


StringBuilder builders = new StringBuilder(sektor);
                            builders.Replace("mieszkaniowy", "Budownictwo mieszkaniowe");
                            builders.Replace("niemieszkaniowy", "Budownictwo niemieszkaniowe");
string segment = builders.ToString();

Problem jest taki że przy tak skonstruowanym kodzie dla "mieszkaniowy" jest spełniony zarówno warunek "mieszkaniowy" jak i "niemieszkaniowy"... Jak zatem wyszukać dokładną wartość stringa tylko "mieszkaniowy"??

2
PYJTER napisał(a):

Jak zatem wyszukać dokładną wartość stringa tylko "mieszkaniowy"??

Przecież to robisz, lepiej się nie da. Tylko Ty zapewne chciałbyś wyszukać " mieszkaniowy" ewentualnie z innym znakiem zamiast spacji na początku. Wszystko zależy od tego jaka jest dokładnie struktura danych wejściowych.

Ja bym po prostu zamienił te dwie linijki z Replace kolejnością, tak chyba najprościej osiągniesz swój aktualny cel.

0

Mam pytanie kombinuję z LINQ mam 37 kolumn nazwanych test1, test2 itd.... do test37
I chciałbym znaleźć pierwszą nie pustą kulumnę
Zapytanie LINQ do zwrócenia jednego konkretnego wiersza wygląda u mnie tak:

var zbiorZap = (from wiersz in repozytorium.GetTable<Inwestycje_test>() where wiersz.Id == Convert.ToInt32(idinwest) select wiersz);

I teraz zwraca mi wszystkie kolumny dla jednego wiersza jak sprawdzić która kolumna jest pierwsza jako pusta??

Próbowałem to tak zrobić:



foreach (var c in zbiorZap)
                    {
                        string test1 = c.test1;
                        string test2 = c.test2;
                        string test3 = c.test3;
}

I if sprawdzić czy jest pusta ale to kod mi wychodzi na dwie strony ;) czy jest jakiś szybszy sposób??

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