PDA

View Full Version : نمایش فایل txt در دیتاگرید با سی شارپ



علی فتحی
چهارشنبه 10 بهمن 1403, 00:58 صبح
سلام این کد رو برای نمایش نوشتم ولی تمام فیل را در یک ستون نمایش میده برای نمایش ستونهای مجزا راهنمایی بفرمایید خیلی گشتم نتیجه نگرفتم


System.IO.StreamReader file = new System.IO.StreamReader(Application.StartupPath + @"\index.txt"); string[] columnnames = file.ReadLine().Split(' ');
DataTable dt = new DataTable();
foreach (string c in columnnames)
{
dt.Columns.Add(c);
}
string newline;
while ((newline = file.ReadLine()) != null)
{
DataRow dr = dt.NewRow();
string[] values = newline.Split(' ');
for (int i = 0; i < values.Length; i++)
{
dr[i] = values[i];
}
dt.Rows.Add(dr);
}
file.Close();
dataGridView1.DataSource = dt;

علی فتحی
چهارشنبه 10 بهمن 1403, 01:41 صبح
ممنون میشم دقیقا برای این فایل کد برنامه را اصلاخ فرمایید

Mahmoud.Afrad
پنج شنبه 11 بهمن 1403, 10:23 صبح
براساس کاراکتر تب یعنی /t بایست split کنید.

sirina
شنبه 20 اردیبهشت 1404, 12:41 عصر
نمایش محتویات یک فایل متنی (.txt) در یک کنترل DataGridView در سی شارپ یه فرایند چند مرحله‌ای داره. شما باید فایل رو بخونید، داده‌هاش رو به یه ساختار مناسب (مثل لیست از لیست‌ها یا لیست از اشیاء) تبدیل کنید و بعد اون ساختار رو به DataSource کنترل DataGridView متصل کنید. در اینجا یه توضیح گام به گام به همراه کد نمونه براتون آوردم:
1. اضافه کردن کنترل DataGridView به فرم:
اول از همه، باید یه کنترل DataGridView به فرم ویندوزی (Windows Form) خودتون اضافه کنید. این کار رو می‌تونید از طریق پنجره‌ی Toolbox در Visual Studio انجام بدید. کافیه کنترل DataGridView رو پیدا کنید و اون رو روی فرم درگ و دراپ کنید.
2. نوشتن کد برای خواندن فایل متنی و تبدیل داده‌ها:
حالا باید کدی بنویسید که فایل متنی رو بخونه و داده‌هاش رو برای نمایش در گرید آماده کنه. فرض کنید فایل متنی شما به این شکله:
نام,سن,شهر
علی,25,تهران
رضا,32,اصفهان
مریم,28,شیراز



یعنی هر خط شامل چند مقدار هست که با کاما از هم جدا شدن و خط اول هم عنوان ستون‌ها رو مشخص می‌کنه. کد سی شارپ برای خوندن و تبدیل این داده‌ها می‌تونه به این صورت باشه:
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ShowTextInDataGridView
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void LoadTextFileToDataGridView(string filePath)
{
try
{
// لیست برای نگهداری ردیف‌های داده
List<string[]> dataRows = new List<string[]>();

// خواندن تمام خطوط فایل
string[] lines = File.ReadAllLines(filePath);

if (lines.Length > 0)
{
// خط اول به عنوان عنوان ستون‌ها در نظر گرفته می‌شود
string[] columnHeaders = lines[0].Split(',');

// تنظیم تعداد ستون‌های دیتاگرید
dataGridView1.ColumnCount = columnHeaders.Length;

// تنظیم عنوان ستون‌های دیتاگرید
for (int i = 0; i < columnHeaders.Length; i++)
{
dataGridView1.Columns[i].HeaderText = columnHeaders[i];
}

// خواندن داده‌ها از خطوط بعدی
for (int i = 1; i < lines.Length; i++)
{
string[] rowData = lines[i].Split(',');
dataRows.Add(rowData);
}

// اتصال لیست داده‌ها به DataSource دیتاگرید
dataGridView1.DataSource = new BindingList<string[]>(dataRows);
}
else
{
MessageBox.Show("فایل خالی است.", "اطلاع", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
MessageBox.Show($"خطا در خواندن فایل: {ex.Message}", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

private void buttonLoadFile_Click(object sender, EventArgs e)
{
// نمایش دیالوگ باز کردن فایل برای انتخاب فایل متنی
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
openFileDialog.Title = "انتخاب فایل متنی";

if (openFileDialog.ShowDialog() == DialogResult.OK)
{
LoadTextFileToDataGridView(openFileDialog.FileName );
}
}
}
}



توضیحات کد:


LoadTextFileToDataGridView(string filePath): این متد وظیفه‌ی اصلی رو بر عهده داره. یه مسیر فایل رو به عنوان ورودی می‌گیره.
List<string[]> dataRows = new List<string[]>();: یه لیست از آرایه‌های رشته‌ای ایجاد می‌کنیم تا ردیف‌های داده رو نگهداری کنیم. هر آرایه رشته‌ای نماینده‌ی یه ردیف در فایل متنی هست.
File.ReadAllLines(filePath);: تمام خطوط فایل متنی رو به صورت یه آرایه از رشته‌ها می‌خونه.
خواندن عنوان ستون‌ها: اگه فایل خطوطی داشته باشه، خط اول به عنوان عنوان ستون‌ها در نظر گرفته می‌شه و با استفاده از Split(',') به آرایه‌ای از رشته‌ها تبدیل می‌شه.
dataGridView1.ColumnCount = columnHeaders.Length;: تعداد ستون‌های DataGridView رو بر اساس تعداد عنوان ستون‌ها تنظیم می‌کنیم.
dataGridView1.Columns[i].HeaderText = columnHeaders[i];: عنوان هر ستون DataGridView رو از آرایه‌ی columnHeaders تنظیم می‌کنیم.
خواندن داده‌ها: از خط دوم فایل شروع می‌کنیم و هر خط رو با استفاده از Split(',') به آرایه‌ای از رشته‌ها تبدیل می‌کنیم و به لیست dataRows اضافه می‌کنیم.
dataGridView1.DataSource = new BindingList<string[]>(dataRows);: مهم‌ترین قسمت اینجاست. ما لیست dataRows رو به عنوان DataSource کنترل DataGridView تنظیم می‌کنیم. استفاده از BindingList<T> باعث می‌شه که اگه تغییری در لیست dataRows ایجاد بشه، DataGridView هم به صورت خودکار به‌روزرسانی بشه.
مدیریت خطا: از بلاک try-catch برای مدیریت خطاهای احتمالی در هنگام خواندن فایل استفاده شده.
buttonLoadFile_Click: این رویداد مربوط به کلیک روی یه دکمه هست که یه دیالوگ باز کردن فایل رو نشون می‌ده تا کاربر فایل متنی مورد نظر رو انتخاب کنه. بعد از انتخاب فایل، متد LoadTextFileToDataGridView با مسیر فایل انتخاب شده فراخوانی می‌شه.

3. اضافه کردن دکمه برای انتخاب فایل (اختیاری):
برای اینکه کاربر بتونه فایل متنی رو انتخاب کنه، می‌تونید یه کنترل Button به فرم اضافه کنید و رویداد Click اون رو به کد بالا متصل کنید. همچنین یه کنترل OpenFileDialog هم به فرم اضافه کنید تا دیالوگ باز کردن فایل نمایش داده بشه.
نکته:


این کد فرض می‌کنه که فایل متنی شما ساختار منظمی داره و مقادیر هر ردیف با کاما از هم جدا شدن. اگه ساختار فایل شما متفاوت هست، باید منطق خوندن و تبدیل داده‌ها رو بر اساس اون تغییر بدید.
برای نمایش داده‌های پیچیده‌تر (مثلاً اگه هر ستون نوع داده‌ی خاصی داره)، بهتره که یه کلاس سفارشی برای نگهداری هر ردیف داده تعریف کنید و یه لیست از اشیاء اون کلاس رو به DataSource متصل کنید. اینجوری می‌تونید نوع داده‌ی هر ستون رو هم در DataGridView مشخص کنید.

این یه روش کلی برای نمایش فایل متنی در DataGridView با سی شارپ هست. برای یادگیری عمیق‌تر مفاهیم کار با فایل‌ها، کنترل‌های ویندوز فرم و اتصال داده‌ها، پیشنهاد می‌کنم به دنبال آموزش برنامه نویسی سی شارپ (https://elecomco.com/product/csharp/) در منابع مختلف بگردید. خیلی از وبسایت‌ها و پلتفرم‌های آموزشی، دوره‌های جامعی در این زمینه‌ها ارائه می‌دن.