Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Salvare tabella con c# in VS2005
martedì 28 ottobre 2008 - 18.27
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
LUNA
Profilo
| Junior Member
53
messaggi | Data Invio:
mar 28 ott 2008 - 18:27
Salve!!Volevo chiedere se qualcuno mi saprebbe dire come posso salvare(in qualsiasi formato) i dati contenuti in un datagrid, in modo tale che poi ne possa fare un copia e incolla in una pagina word!!
Vi ringrazio tanto!!
Luna
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
mar 28 ott 2008 - 18:36
Ciao
Con questa procedura salvi in formato CSV
Private Sub SaveGridDataInFile(ByRef fName As String)
Dim I As Integer = 0
Dim j As Integer = 0
Dim cellvalue$
Dim rowLine As String = ""
Try
Dim objWriter As New System.IO.StreamWriter(fName, True)
For j = 0 To (DataGridView1.Rows.Count - 2)
For I = 0 To (DataGridView1.Columns.Count - 1)
If Not TypeOf DataGridView1.CurrentRow.Cells.Item(I).Value Is DBNull Then
cellvalue = DataGridView1.Item(I, j).Value
Else
cellvalue = ""
End If
rowLine = rowLine + cellvalue + ","
Next
objWriter.WriteLine(rowLine)
rowLine = ""
Next
objWriter.Close()
MsgBox("Text written to file")
Catch e As Exception
MessageBox.Show("Error occured while writing to the file." + e.ToString())
Finally
FileClose(1)
End Try
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
SaveGridDataInFile(Me.TextBox1.Text) Qui ci metti il percorso ed il nome del file *.CSV
End Sub
Ciao
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
mar 28 ott 2008 - 18:43
Scusa ...
che tradotto in C# dovrebbe essere
private void SaveGridDataInFile(ref string fName) {
int I = 0;
int j = 0;
object cellvalue;
string rowLine = "";
try {
System.IO.StreamWriter objWriter = new System.IO.StreamWriter(fName, true);
for (j = 0; (j
<= (DataGridView1.Rows.Count - 2)); j++) {
for (I = 0; (I
<= (DataGridView1.Columns.Count - 1)); I++) {
if (!(DataGridView1.CurrentRow.Cells.Item[I].Value.GetType() == DBNull)) {
cellvalue = DataGridView1.Item[I, j].Value;
}
else {
cellvalue = "";
}
rowLine = (rowLine
+ (cellvalue + ","));
}
objWriter.WriteLine(rowLine);
rowLine = "";
}
objWriter.Close();
MsgBox("Text written to file");
}
catch (Exception e) {
MessageBox.Show(("Error occured while writing to the file." + e.ToString()));
}
finally {
FileClose(1);
}
}
private void Button2_Click(object sender, System.EventArgs e) {
SaveGridDataInFile(this.TextBox1.Text);
// Qui ci metti il percorso ed il nome del file *.CSV
}
come da
http://www.carlosag.net/Tools/CodeTranslator/
Ciao
LUNA
Profilo
| Junior Member
53
messaggi | Data Invio:
sab 1 nov 2008 - 19:15
Ciao AlexMed!Grazie per la risposta e per la conversione in c#!
Non sono però ancora riuscita a salvare la singola tabella di un dataGrid in un file tipo .xls.
Sto cercando di utilizzare SaveFileDialog,mi puoi dare qualche consiglio?
Grazie mille!
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
sab 1 nov 2008 - 20:58
Ciao
Se vuoi implementare il codice sopra con un SaveFileDialog1 (sempre tramite CodeTranslator):
SaveFileDialog1.InitialDirectory = "C:\\";
SaveFileDialog1.Filter = "CSV files (*.csv)|*.CSV";
SaveFileDialog1.FilterIndex = 2;
SaveFileDialog1.FileName = "";
SaveFileDialog1.RestoreDirectory = true;
if ((SaveFileDialog1.ShowDialog() == DialogResult.OK)) {
SaveGridDataInFile(SaveFileDialog1.FileName);
}
Però mi viene un dubbio:
Tu voui salvare il contenuto della DataGrid in un file Excel oppure vuoi inserire il valore di una cella del DataGrrid in una cella specifica del foglio Excel?
Nel primo caso allora il concetto che ti ho esposto sopra dovrebbe andar bene (tra l'altro: è un DataGrid o un DataGridView?).
Il file CSV una volta creato lo puoi tranquillamente aprire con Excel.
Nel secondo caso le cose cambiano decisamente e quindi affronterei il discorso solo se siamo in questo caso, anche perchè non sò se in c# e in vb i concetti sono gli stessi.
Ciao
LUNA
Profilo
| Junior Member
53
messaggi | Data Invio:
dom 2 nov 2008 - 12:16
Esatto, mi interessa salvare il contenuto di una DataGrid in un file excell, si sto lavorando con DataGridView.
Il problema è che mi da alcuni errori che non capisco:
1)'System.Windows.Forms.DataGridViewRow' does not contain a definition for 'Item'
2)The name 'FileClose' does not exist in the current context
3)'System.Windows.Forms.DataGridView' does not contain a definition for 'Item'
4)The best overloaded method match for 'mapPoint.Form1.SaveGridDataInFile(ref string)' has some invalid arguments
aiutooooo
Ti riporto anche per intero ciò che ho scritto!
private void button12_Click(object sender, EventArgs e)
{
SaveFileDialog DialogSave = new SaveFileDialog();
DialogSave.DefaultExt = "csv";
DialogSave.Filter = "CSV files (*.csv)|*.CSV";
DialogSave.AddExtension = true;
DialogSave.RestoreDirectory = true;
DialogSave.Title = "Where do you want to save the file?";
DialogSave.InitialDirectory = @"C:\Documents and Settings\annakarenina\Desktop";
DialogSave.FileName = "io";
if (DialogSave.ShowDialog() == DialogResult.OK)
{
SaveGridDataInFile(DialogSave.FileName);
}
else
{
MessageBox.Show("You hit cancel or closed the dialog.");
}
DialogSave.Dispose();
DialogSave = null;
}
private void SaveGridDataInFile(ref string fName)
{
{
int I = 0;
int j = 0;
object cellvalue;
string rowLine = "";
try
{
StreamWriter objWriter = new StreamWriter(fName, true);
for (j = 0; (j
<= (DataDistance.Rows.Count - 2)); j++)
{
for (I = 0; (I
<= (DataDistance.Columns.Count - 1)); I++)
{
if (!(DataDistance.CurrentRow.Item[I].Value.GetType() == System.DBNull.Value))
{
cellvalue = DataDistance.Item[I, j].Value;
}
else
{
cellvalue = "";
}
rowLine = (rowLine
+ (cellvalue + ","));
}
objWriter.WriteLine(rowLine);
rowLine = "";
}
objWriter.Close();
MessageBox.Show("Text written to file");
}
catch (Exception e)
{
MessageBox.Show(("Error occured while writing to the file." + e.ToString()));
}
finally
{
FileClose(1);
}
throw new Exception("The method or operation is not implemented.");
}
}
}
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
dom 2 nov 2008 - 13:16
Ciao
Forse il motivo è da ricercare in "fName"
Prova modificando così:
private void button12_Click(object sender, EventArgs e)
{
SaveFileDialog DialogSave = new SaveFileDialog();
DialogSave.DefaultExt = "csv";
DialogSave.Filter = "CSV files (*.csv)|*.CSV";
DialogSave.AddExtension = true;
DialogSave.RestoreDirectory = true;
DialogSave.Title = "Where do you want to save the file?";
DialogSave.InitialDirectory = @"C:\Documents and Settings\annakarenina\Desktop";
DialogSave.FileName = "io";
if (DialogSave.ShowDialog() == DialogResult.OK)
{
SaveGridDataInFile(DialogSave.FileName);
}
else
{
MessageBox.Show("You hit cancel or closed the dialog.");
}
DialogSave.Dispose();
DialogSave = null
Scusa mi è partito "Invia Messaggio"
Dove hai
SaveGridDataInFile(DialogSave.FileName);
mettigli
fName = DialogSave.FileName
LUNA
Profilo
| Junior Member
53
messaggi | Data Invio:
dom 2 nov 2008 - 14:55
Perfeto grazie!quel problema è risolto, però continua a non riconoscermi "item" e "FileClose(1)"....
Non so come muovermi...
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
dom 2 nov 2008 - 16:27
Facciamo così, andiamo per gradi
Questo codice dovrebbe farti vedere in un MsgBox riga per riga con i campi separati da ";"
for (int iRow = 0; (iRow
<= (this.dgvCARRELLO.RowCount - 1)); iRow++) {
string rowString = "";
for (int iCol = 0; (iCol
<= (this.dgvCARRELLO.ColumnCount - 1)); iCol++) {
rowString = (rowString
+ (this.dgvCARRELLO.Item(iCol, iRow).Value.ToString + ";"));
}
MsgBox(rowString);
}
Se funziona questo andiamo avanti
LUNA
Profilo
| Junior Member
53
messaggi | Data Invio:
dom 2 nov 2008 - 17:09
Scusami se ti sto prendendo così tanto tempo!Ho un po modificato il codice perchè alcune parole non me le leggeva(come item)
private void SaveGridDataInFile(string fName)
{
int N = DataDistance.RowCount;
int M = DataDistance.ColumnCount;
int I = 0;
int j = 0;
object cellvalue;
string rowLine = "";
try
{
StreamWriter objWriter = new StreamWriter(fName, true);
while(I<N)
{
while(j<M)
{
if (DataDistance.Rows[I].Cells[j].Value != System.DBNull.Value)
{
cellvalue = DataDistance.Rows[I].Cells[j].Value;
MessageBox.Show(DataDistance.Rows[I].Cells[j].Value.ToString());
}
else
{
cellvalue = "";
}
rowLine =rowLine+ Convert.ToString(cellvalue);
// rowLine = (rowLine + (cellvalue + ","));
j++;
}
MessageBox.Show(rowLine.ToString());
objWriter.WriteLine(rowLine);
rowLine = "";
I++;
}
objWriter.Close();
...
Scrivendo così però mi ricopia tutti i valori della dataGrid sulla prima cella e basta!Io vorrei che ogni valore stia al suo posto, cioè nella sua cella...Se hai ancora un po di tempo da dedicarmi, ti sarei molto grato se mi aiutassi!!
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
dom 2 nov 2008 - 17:41
Ciao
stavo guardando la guida in linea ed ho trovato questo sotto la proprietà "Item"
public DataGridViewCell this [
int columnIndex,
int rowIndex
] { get; set; }
Mi chiedevo se non basta sostituire "Item" con "Cell"?
Purtroppo non conosco la sintassi di C# ma credo che i concetti siano gli stessi e che il Code Translation risolvesse al 100% la conversione.
A questo punto ti chiedo:
In C# se devi leggere il contenuto della cella posizionata nella 2a colonna e seconda linea cosa scriveresti?
LUNA
Profilo
| Junior Member
53
messaggi | Data Invio:
lun 3 nov 2008 - 14:34
Per leggere il contenuto di una cella posizionata nella seconda colonna e nella seconda riga scriverei:
DataGrid.Rows[2].Cells[2].Value qui è contenuto il valore della cella posizionata nella seconda riga della seconda colonna!
Comunque penso che la conversione che ho fatto senza usare item vada bene e penso anche di aver risolto il problema!Ti ringrazio molto per l'aiuto e per il codice che mi hai mandato!Sei stato gentilissimo!!!
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !