خروجی فایل تکست از datagridview در C#
با سلام
من میخوام از یه datagridview خروجی تکست بگیرم کد زیر رو هم نوشتم:
try { const string path = @"f:\123\123.txt"; using (FileStream fileStream = File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) using (TextWriter sw = new StreamWriter(fileStream)) { int rowcount = dgvSum.Rows.Count; for (int i = 0; i < rowcount - 1; i++) { sw.WriteLine(dgvSum.Rows[i].Cells[0].Value.ToString()); } } MessageBox.Show(@"Text file was created."); } catch (Exception exception) { MessageBox.Show(exception.ToString()); //Console.WriteLine(exception); }
ولی بهم ارور زیر رو میده:
ممنون می شم کمکم کنید
16 پاسخ
کد رو بصورت بالا تغییر دادم ولی میخوام بتونم سلول ها با تب از هم جدا شده باشن.
ممنون مشکل حل شد.
تو قسمت string.join به جای , از t\ استفاده کنید.
خوب، به خاطر اینه که شما تو کدتون فقط ستون اول رو گذاشتید، بقیه ستون ها رو هم باید اضافه کنید:
builder.AppendLine(dgvSum.Rows[i].Cells[0].Value.ToString() + "," + dgvSum.Rows[i].Cells[1].Value.ToString());
میدونم نباید اینجوری تشکر کنم ولی انقدر خوشحال شدم که نمیتونم تشکر نکنم. این سوالا توی چند تا فروم خارجی هم گذاشته بودم ولی هیچکدوم نتونستن حل کنن مشکلم رو. ممنون
اون ارور درست شد ولی هیچ دیتایی رو وارد فایل تکست نمی کنه.....
سوال بعدی. اگر بخوام مسیر و نام فایل رو کاربر انتخاب کنه باید کد رو چطور تغییربدم؟
به خاطر اینکه شما حلقه تو در تو استفاده کردید. باید ابتدا هر سطر رو ایجاد کنید و بعد به رشتتون اضافه کنید:
SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "Text File|*.txt"; var result = dialog.ShowDialog(); if (result != DialogResult.OK) return; StringBuilder builder = new StringBuilder(); int rowcount = dgvSum.Rows.Count; int columncount = dgvSum.Columns.Count; for (int i = 0; i < rowcount - 1; i++) { List<string> cols = new List<string>(); for (int j = 0; j < columncount - 1; j++) { cols.Add(dgvSum.Rows[i].Cells[j].Value.ToString()); } builder.AppendLine(string.Join(",", cols)); } System.IO.File.WriteAllText(dialog.FileName, builder.ToString()); MessageBox.Show(@"Text file was created.");
کد زیر رو تست کنید ببینید مشکل برطرف میشه:
try { SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "Text File|*.txt"; var result = dialog.ShowDialog(); if (result != DialogResult.OK) return; StringBuilder builder = new StringBuilder(); int rowcount = dgvSum.Rows.Count; for (int i = 0; i < rowcount - 1; i++) { builder.AppendLine(dgvSum.Rows[i].Cells[0].Value.ToString()); } System.IO.File.WriteAllText(dialog.FileName, builder.ToString()); MessageBox.Show(@"Text file was created."); } catch (Exception exception) { MessageBox.Show(exception.ToString()); //Console.WriteLine(exception); }
باز هم چیزی توی فایل تکست نیست.
کد رو بصورت زیر تغییر دادم
SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "Text File|*.txt"; var result = dialog.ShowDialog(); if (result != DialogResult.OK) return; StringBuilder builder = new StringBuilder(); int rowcount = dgvSum.Rows.Count; int columncount = dgvSum.Columns.Count; for (int i = 0; i < rowcount - 1; i++) { for (int j=0; j < columncount-1 ; j++) { builder.AppendLine(dgvSum.Rows[i].Cells[j].Value.ToString()); } } System.IO.File.WriteAllText(dialog.FileName, builder.ToString()); MessageBox.Show(@"Text file was created.");
ولی محتوای فایل تکست بصورت زیره:
هومن فرخی یقبلیلی 20خرداد1397 26450 0 450 150 450 750 600 600 300 300 1500 2000 0 0 0 0 0 0 0 0 0 هومن فرخی یقبلیلی 20خرداد1397 26450 0 450 150 450 750 600 600 300 300 1500 2000 0 0 0 0 0 0 0 0 0 هومن فرخی یقبلیلی 20خرداد1397 26450 0 450 150 450 750 600 600 300 300 1500 2000 0 0 0 0 0 0 0 0 0 هومن فرخی یقبلیلی 20خرداد1397 26450 0 450 150 450 750 600 600 300 300 1500 2000 0 0 0 0 0 0 0 0 0 هومن فرخی یقبلیلی 20خرداد1397 26450 0 450 150 450 750 600 600 300 300 1500 2000 0 0 0 0 0 0 0 0 0
یعنی هر سلول دیتا گرید ویو رو توی یه سطر میزنه!
نه بازم درست نشد!!!!!!
فقط ستون اول دیتا گرید ویو رو میزنه توی تکست
با سلام، وارد تنظیمات پروژه شده و از بخش Security گزینه Enable ClickOnce security settings رو انتخاب کنید. در ادامه از تنظیمات همین بخش گزینه this is full trust application رو انتخاب کنید ببینید مشکل حل میشه؟
اگه بخوام اسم ستون ها هم توی فایل تکست بیاد باید چکار کنم؟
کد رو به صورت زیر تغییر بدید:
builder.AppendLine(string.Join(",", cols.ToArray()));
دستورات بالا رو به صورت زیر تغییر بدید، یعنی بعد از for دستور flush رو اضافه کنید، برای انتخاب فایل هم از SaveFileDialog استفاده کنید:
try { SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "Text File|*.txt"; var result = dialog.ShowDialog(); if (result != DialogResult.OK) return; using (FileStream fileStream = File.Open(dialog.FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) using (TextWriter sw = new StreamWriter(fileStream)) { int rowcount = dgvSum.Rows.Count; for (int i = 0; i < rowcount - 1; i++) { sw.WriteLine(dgvSum.Rows[i].Cells[0].Value.ToString()); } sw.Flush(); } MessageBox.Show(@"Text file was created."); } catch (Exception exception) { MessageBox.Show(exception.ToString()); //Console.WriteLine(exception); }
با همین مکانیزم بالا، قبل از اضافه کردن مقادیر ستون ها به StringBuilder، نام ستون ها رو اضافه کنید.
با کد بالا در قسمت:
builder.AppendLine(string.Join(",", cols));
ارور زیر رو میده:
Severity Code Description Project File Line Suppression State Error CS1503 Argument 2: cannot convert from 'System.Collections.Generic.List<string>' to 'string[]' WindowsFormsApplication2 C:\Users\kanoonadmin\Desktop\WindowsFormsApplication2\WindowsFormsApplication2\Form1.cs 482 Active