Problema con datagridview

di il
1 risposte

Problema con datagridview

Salve ho un problema con datagridview. Nel progetto che sto elaborando ho inserito la possibilità di importare file xls tramite la libreria Exceldatareader, ho applicato ad un pulsante il seguente codice per l'eportazione
	using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "Excel 97-2003|*.xls|Excel |*.xlsx", ValidateNames = true })
			{

				if (ofd.ShowDialog() == DialogResult.OK)
				{
                    soll_slu_dgv.Columns.Clear();
                    soll_sle_dgv.Columns.Clear();

                    FileStream fs = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
					IExcelDataReader reader;

					if (ofd.FilterIndex == 1)
						reader = ExcelReaderFactory.CreateBinaryReader(fs);
					else
						reader = ExcelReaderFactory.CreateOpenXmlReader(fs);

					result = reader.AsDataSet();

					foreach (DataTable dt in result.Tables)
						schede_xls_cb.Items.Add(dt.TableName);
					reader.Close();

					schede_xls_cb.SelectedIndex = 0;

					soll_slu_dgv.Columns[0].HeaderText = "Tipo Comb";
					soll_slu_dgv.Columns[1].HeaderText = "Comb";
					soll_slu_dgv.Columns[2].HeaderText = "Fx [kN]";
					soll_slu_dgv.Columns[3].HeaderText = "Fy [kN]";
					soll_slu_dgv.Columns[4].HeaderText = "Fz [kN]";
					soll_slu_dgv.Columns[5].HeaderText = "My[kN]";
					soll_slu_dgv.Columns[6].HeaderText = "Mz[kNm]";

					soll_slu_dgv.Columns[0].DefaultCellStyle.Format = "0";

                    FileStream fs2 = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
                    IExcelDataReader reader2;

                    if (ofd.FilterIndex == 1)
                        reader2 = ExcelReaderFactory.CreateBinaryReader(fs2);
                    else
                        reader2 = ExcelReaderFactory.CreateOpenXmlReader(fs2);

                    result2 = reader2.AsDataSet();

                    foreach (DataTable dt2 in result2.Tables)
                        schede_xls2_cb.Items.Add(dt2.TableName);
                    reader2.Close();

                    schede_xls2_cb.SelectedIndex = 1;

                    soll_sle_dgv.Columns[0].HeaderText = "Tipo Comb";
                    soll_sle_dgv.Columns[1].HeaderText = "Comb";
                    soll_sle_dgv.Columns[2].HeaderText = "Fx [kN]";
                    soll_sle_dgv.Columns[3].HeaderText = "Fy [kN]";
                    soll_sle_dgv.Columns[4].HeaderText = "Fz [kN]";
                    soll_sle_dgv.Columns[5].HeaderText = "My[kN]";
                    soll_sle_dgv.Columns[6].HeaderText = "Mz[kNm]";

                    soll_sle_dgv.Columns[0].DefaultCellStyle.Format = "0";

                    try
					{
						
					}
					catch (Exception)
					{
						MessageBox.Show("Prima di caricare un nuovo file excel, nel caso sia presente una tabella di verifica non vuota è " +
										"necessario cancellare la tabella nella scheda 'Verifica SETTO a Pressoflessione e taglio'  con l'apposito pulsante.\n\n" +
										"Sarà poi necessario aggiornare il file dalla scheda 'Sollecitazioni SETTO'", "ERRORE", MessageBoxButtons.OK, MessageBoxIcon.Error);
					}
				}
			}
ho inserito poi la possibilità di importazione nella stessa datagridview di un file da me creato con altro mio programma (un file xml strutturato ad hoc per andare a riempire la datagridview che permette l'importazione del file xlsx).
 DataSet ds1 = new DataSet();
            //ds.ReadXml(@"D:\data.xml");
            ds1.ReadXml(openFileDialog2.FileName);

            soll_slu_dgv.Columns.Clear();
            soll_sle_dgv.Columns.Clear();

            result.Tables.Clear();
            result2.Tables.Clear();

            //sollecitazini slu
            if (ds1.Tables["dgv_slu"] != null)
            {
                soll_slu_dgv.Columns.Add("tipo_slu_xls", "Tipo");
                soll_slu_dgv.Columns.Add("comb_slu_xls", "Comb.");
                soll_slu_dgv.Columns.Add("fx_slu_xls", "Fx");
                soll_slu_dgv.Columns.Add("fy_slu_xls", "Fy");
                soll_slu_dgv.Columns.Add("fz_slu_xls", "Fz");
                soll_slu_dgv.Columns.Add("my_slu_xls", "My");
                soll_slu_dgv.Columns.Add("mz_slu_xls", "Mz");

                foreach (DataRow posiz in ds1.Tables["dgv_slu"].Rows)
                {
                    int n = soll_slu_dgv.Rows.Add();

                    soll_slu_dgv.Rows[n].Cells[0].Value = posiz[0].ToString();
                    soll_slu_dgv.Rows[n].Cells[1].Value = posiz[1].ToString();
                    soll_slu_dgv.Rows[n].Cells[2].Value = posiz[2].ToString();
                    soll_slu_dgv.Rows[n].Cells[3].Value = posiz[3].ToString();
                    soll_slu_dgv.Rows[n].Cells[4].Value = posiz[4].ToString();
                    soll_slu_dgv.Rows[n].Cells[5].Value = posiz[5].ToString();
                    soll_slu_dgv.Rows[n].Cells[6].Value = posiz[6].ToString();
                }
            }

            //sollecitazini slv
            if (ds1.Tables["dgv_slv"] != null)
            {
                foreach (DataRow posiz in ds1.Tables["dgv_slv"].Rows)
                {
                    int n = soll_slu_dgv.Rows.Add();

                    soll_slu_dgv.Rows[n].Cells[0].Value = posiz[0].ToString();
                    soll_slu_dgv.Rows[n].Cells[1].Value = posiz[1].ToString();
                    soll_slu_dgv.Rows[n].Cells[2].Value = posiz[2].ToString();
                    soll_slu_dgv.Rows[n].Cells[3].Value = posiz[3].ToString();
                    soll_slu_dgv.Rows[n].Cells[4].Value = posiz[4].ToString();
                    soll_slu_dgv.Rows[n].Cells[5].Value = posiz[5].ToString();
                    soll_slu_dgv.Rows[n].Cells[6].Value = posiz[6].ToString();
                }
            }


            //sollecitazini sld
            if (ds1.Tables["dgv_sld"] != null)
            {
                foreach (DataRow posiz in ds1.Tables["dgv_sld"].Rows)
                {
                    int n = soll_slu_dgv.Rows.Add();

                    soll_slu_dgv.Rows[n].Cells[0].Value = posiz[0].ToString();
                    soll_slu_dgv.Rows[n].Cells[1].Value = posiz[1].ToString();
                    soll_slu_dgv.Rows[n].Cells[2].Value = posiz[2].ToString();
                    soll_slu_dgv.Rows[n].Cells[3].Value = posiz[3].ToString();
                    soll_slu_dgv.Rows[n].Cells[4].Value = posiz[4].ToString();
                    soll_slu_dgv.Rows[n].Cells[5].Value = posiz[5].ToString();
                    soll_slu_dgv.Rows[n].Cells[6].Value = posiz[6].ToString();
                }
            }

            //sollecitazini sle
            if (ds1.Tables["dgv_sle"] != null)
            {
                soll_sle_dgv.Columns.Clear();

                soll_sle_dgv.Columns.Add("tipo_sle_xls", "Tipo");
                soll_sle_dgv.Columns.Add("comb_sle_xls", "Comb.");
                soll_sle_dgv.Columns.Add("fx_sle_xls", "Fx");
                soll_sle_dgv.Columns.Add("fy_sle_xls", "Fy");
                soll_sle_dgv.Columns.Add("fz_sle_xls", "Fz");
                soll_sle_dgv.Columns.Add("my_sle_xls", "My");
                soll_sle_dgv.Columns.Add("mz_sle_xls", "Mz");

                foreach (DataRow posiz in ds1.Tables["dgv_sle"].Rows)
                {
                    int n = soll_sle_dgv.Rows.Add();

                    soll_sle_dgv.Rows[n].Cells[0].Value = posiz[0].ToString();
                    soll_sle_dgv.Rows[n].Cells[1].Value = posiz[1].ToString();
                    soll_sle_dgv.Rows[n].Cells[2].Value = posiz[2].ToString();
                    soll_sle_dgv.Rows[n].Cells[3].Value = posiz[3].ToString();
                    soll_sle_dgv.Rows[n].Cells[4].Value = posiz[4].ToString();
                    soll_sle_dgv.Rows[n].Cells[5].Value = posiz[5].ToString();
                    soll_sle_dgv.Rows[n].Cells[6].Value = posiz[6].ToString();
                }
            }
funziona tutto se carico o solo file xls o solo file personali (xlm), però se vado a caricare prima un file xls e successivamente un file personale (xml) dopo aver preventivamente cancellato tutte le righe e tutte le colonne della datagridview, il programma si blocca e viene segnalato il seguente errore.

"Impossibile aggiungere righe a livello di codice alla raccolta di righe di DataGridView in caso di associazione a dati del controllo."

Come posso risolvere il problema?

grazie anticipate a tutti

1 Risposte

  • Re: Problema con datagridview

    L datatable è l'origine dati per la tua DataGridView. Pertanto, se si desidera aggiungere elementi alla vista, è necessario aggiungerli alla propria origine dati. Dovresti utilizzare invece il metodo DataTable.NewRow. Ora stai aggiornando datatable e gridview, che conducono dati databili sono più efficaci quando si confrontano con gridview.
Devi accedere o registrarti per scrivere nel forum
1 risposte