Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας παιδιά

Θέλω να φτιάξω ένα datagrid και να το γεμίσω τιμές απο ένα sql dataset

Το datagrid σαν columns θα έχει 4

Τα 3 θα είναι απο τις τιμές του dataset και το 4 θα πρέπει να μπορώ να βάζω εγώ τιμές.

Μετά θα το κάνω export σε αρχείο με συγκεκριμένη γραμμογράφηση.

 

Φτιάχνω ένα datagrid με τις 4 στήλες.

Βάζω το VirtualMode σε true.

και με αυτό γεμίζω με values το grid μου

>
private void Grid1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
   e.Value = suptable[e.RowIndex, e.ColumnIndex+1];          
}

 

το suptable έχει το dataset μου απο το sql

 

Ερωτήσεις:

1)Το θέμα είναι οτι ενώ μου γεμίζει τις τιμές όταν πάω στο δικό μου πεδίο (4ο στην σειρά), πληκτρολογώ την τιμή μου δεν την κρατάει

Δημοσ.

Γεια σας παιδιά

Θέλω να φτιάξω ένα datagrid και να το γεμίσω τιμές απο ένα sql dataset

Το datagrid σαν columns θα έχει 4

Τα 3 θα είναι απο τις τιμές του dataset και το 4 θα πρέπει να μπορώ να βάζω εγώ τιμές.

Μετά θα το κάνω export σε αρχείο με συγκεκριμένη γραμμογράφηση.

 

Φτιάχνω ένα datagrid με τις 4 στήλες.

Βάζω το VirtualMode σε true.

και με αυτό γεμίζω με values το grid μου

>
private void Grid1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
   e.Value = suptable[e.RowIndex, e.ColumnIndex+1];          
}

 

το suptable έχει το dataset μου απο το sql

 

Ερωτήσεις:

1)Το θέμα είναι οτι ενώ μου γεμίζει τις τιμές όταν πάω στο δικό μου πεδίο (4ο στην σειρά), πληκτρολογώ την τιμή μου δεν την κρατάει

 

 

Καλησπέρα φίλε,,

 

το DataGridView σου είναι databound, σωστά? Εφόσων τραβάς τις τιμές από κάποιο πίνακα της βάσης έχεις κάποιο DataSet, κάποιον TableAdapter, ένα BindingSource και αυτό συνδεδεμένο πάνω στο DataGridView (υποθέτω) ... Αν κάνεις edit τα columns στο DataGridView σου, και προσθέσεις ένα Column, έχεις την επιλογή να το προσθέσεις Unbound. Το πρόβλημά σου εδώ θα είναι οτι δεν θα μπορεί να σωθεί κάπου η τιμή του μιας και είναι ακριβώς οτι δεν είναι τα υπόλοιπα columns, data bound δηλαδή ...

 

Τί προσπαθείς να κάνεις? μπορείς να το περιγράψεις λίγο μήπως σε βοηθήσουμε?

 

φιλικά,

nspyrou

  • 2 μήνες μετά...
Δημοσ.

επανερχομαι στο ερώτημα με το datagrid.

μετά απο λίγη δουλειά που του έκανα έχω φτάσει σε αυτό το επίπεδο:

 

>
               connTo.Open();

               SqlDataReader sqlFromReader1 = null;
               SqlDataReader sqlFromReader2 = null;
               SqlDataReader sqlFromReader3 = null;

               SqlCommand myFromCommand1 = new SqlCommand("select distinct m.catid1, c.descr "+
               "from material m "+
               "inner join cat1 c on c.id = m.catid1", connTo);
               sqlFromReader1 = myFromCommand1.ExecuteReader();

               DataTable dt1 = new DataTable();
               dt1.Load(sqlFromReader1);

               for (i = 0; i < dt1.Rows.Count; i++)
               {
                   //int c1 = (int)(dt1.Rows[i]["catid1"]);
                   TabPage tbg = new TabPage(dt1.Rows[i]["descr"].ToString());
                   tabControl1.Controls.Add(tbg);

                   TabControl tbi = new TabControl();
                   tbi.Name = i.ToString() + i.ToString();

                   SqlCommand myFromCommand2 = new SqlCommand(
                       "select distinct m.catid2, c.descr " +
                       "from material m " +
                       "inner join cat2 c on c.id = m.catid2 "+
                       "and m.catid1 = " + dt1.Rows[i]["catid1"].ToString(), connTo);
                       sqlFromReader2 = myFromCommand2.ExecuteReader();
                       
                   DataTable dt2 = new DataTable();
                   dt2.Load(sqlFromReader2);

                   for (int k = 0; k < dt2.Rows.Count; k++)
                   {
                       //int c2 = (int)(dt2.Rows[k]["catid2"]);
                       TabPage tbgi = new TabPage(dt2.Rows[k]["descr"].ToString());
                       tbi.Controls.Add(tbgi);
                       tbi.Left = 1;
                       tbi.Top = 1;
                       tbi.Width = 880;
                       tbi.Height = 400;

                       
                       DataGridView gv = new DataGridView();

                       gv.Width = 850;
                       gv.Height = 340;                        
                       gv.Left = 10;
                       gv.Top = 10;
                       gv.ColumnCount = 4;
                       gv.Columns[0].Name = "code";
                       gv.Columns[0].Width = 120;
                       gv.Columns[0].ReadOnly = true;

                       gv.Columns[1].Name = "name";
                       gv.Columns[1].Width = 450;
                       gv.Columns[1].ReadOnly = true;

                       gv.Columns[2].Name = "price";
                       gv.Columns[2].Width = 80;
                       gv.Columns[2].ReadOnly = true;

                       gv.Columns[3].Name = "qty";
                       gv.Columns[3].Width = 120;

                       SqlCommand myFromCommand3 = new SqlCommand(
                           "select m.code, m.descr, m.cost1 price " +
                           "from material m " +
                           "where m.catid1 = " + dt1.Rows[i]["catid1"].ToString() + " " +
                           "and m.catid2 = " + dt2.Rows[k]["catid2"].ToString(), connTo);

                       sqlFromReader3 = myFromCommand3.ExecuteReader();

                       DataTable dt3 = new DataTable();
                       dt3.Load(sqlFromReader3);

                       for (int l = 0; l < dt3.Rows.Count; l++)
                       {
                           gv.Rows.Add(dt3.Rows[l]["code"].ToString(), dt3.Rows[l]["descr"].ToString(), dt3.Rows[l]["price"].ToString(), "");
                       }
//****************************
//Εδώ προσθέτω το EventHandler
//****************************
                       
                       tbgi.Controls.Add(gv);                                               
                   }
                   tbg.Controls.Add(tbi);
        

 

εδώ αφού δημιουργήσω κάποια tabs και subtabs, σε κάθε ένα απο αυτά προσθέτω ένα datagridview το οποίο το γεμίζω με τιμές.

θέλω τώρα όταν ο χρήστης πρόσθέσει κάποια τιμή στο gv.Columns[3], αυτό να το "πιάσω" και να προσθέσω την όλες τις τιμές του συγκεκριμένου Column σε ένα άλλο datagrid που θα κρατάω τις πληροφορίες αυτές για να τις έξάγω αργότερα.

το θέμα είναι ότι όταν προσπαθώ να προσθέσω eventhandler

 

gv.CellValueChanged += new DataGridViewCellEventHandler(gv_CellValueChenged);

 

το eventargs μου δίνει ColumnIndex και RowIndex

 

τι eventhandler πρέπει να βάλω;

Δημοσ.

Για να πιάσεις την τιμή του Cell που έχει γίνει edit, μπορείς να κάνεις Handle το CellEndEdit του DataGridView. Έλεγξε μόνο ο,τι το κελί που έγινε edit είναι το κελί που σε ενδιαφέρει..

 

Θεωρώ πάντως, βάσει του κώδικα που έχεις παραθέσει, οτι ξαναεφεύρεις τον τροχό από την αρχή ενώ δεν χρειάζεται ... Το DataBinding είναι πολύ straight forward στην C#, και λειτουργεί άψογα. (Έχω στήσει ολόκληρο CRM βασισμένος στο DataBinding των Controls με Binding Sources & Binding Navigators) ...

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...