PDA

View Full Version : سوال: نمایش فایل متن در datagridview - و تفکیک تاریخ ورود و خروج



علی فتحی
شنبه 11 دی 1395, 00:29 صبح
با سلام این سول رو تو تاپیکهای مختلف و در سایتهای مختلف مطرح کردم ولی به نتیجه نرسیدم . برنامه ثبت حضور و غیاب پرسنل . دستگاه فایل متنی رو پشت سر هم بیرون میده
دو کار اساسی باید انجام داد:
1-ورود و خروج را چگونه جدا کنم تا در محاسبه تاریخ اختلاف و اضافه کاری رو بدست بیارم.
2- با شیف 1 و 2 اینکارو کردم ولی اشکالی که داره روزهای تطیل یا خالی رو نشون نمیده .مثلا اگر کارمند صبح یاد ش بره عصر بزنه جای ورود خالی باشه .

3-چگونه همین فایل رو که همراه برنامه هستش در دیتاگرید لود کنم تا ذخیره بشه (که البته تو ذخیره مشکلی نیست)

ممنون مبشم رو همین سورس کار بشه تا دیگران هم استفاده بکنند با تشکر


لطفا" برنامه نویسان حرفه ای جواب بدن ممنون میشم با تشکر فتحی


http://s8.picofile.com/file/8280606384/New_folder_2_.zip.html


http://s9.picofile.com/file/8280606426/New_folder.zip.html

ژیار رحیمی
شنبه 11 دی 1395, 01:38 صبح
سلام فایل متنی شامل 10 ستون هست که با tab از هم جدا شدن.

public DataTable ConvertToDataTable(string filePath, int numberOfColumns)
{
var tbl = new DataTable();
var sep = "\t";
for (int col = 0; col < numberOfColumns; col++)
tbl.Columns.Add(new DataColumn("Column" + (col + 1)));




string[] lines = File.ReadAllLines(filePath);


foreach (string line in lines)
{
var cols = line.Split(sep.ToCharArray());


DataRow dr = tbl.NewRow();
for (int cIndex = 0; cIndex < numberOfColumns; cIndex++)
{
dr[cIndex] = cols[cIndex];
}


tbl.Rows.Add(dr);
}


return tbl;
}

نحوه فراخوانی

dataGridView1.DataSource = ConvertToDataTable(Application.StartupPath + @"\lood.txt", 10);

علی فتحی
یک شنبه 12 دی 1395, 01:07 صبح
آقای رحیمی گل و استاد گرانقدر جا داره از شما خیلی تشکر کنم .واقعا کارت عالی بود خیلی وقته دنبالشم نتیجه نگرفتم

علی فتحی
دوشنبه 13 دی 1395, 00:22 صبح
ردیف اول فایل متنی رو چگونه هدر دیتاگرید قرار بدم.؟؟

ژیار رحیمی
دوشنبه 13 دی 1395, 10:30 صبح
var tbl = new DataTable();
var sep = "\t";
var lines = File.ReadAllLines(filePath);
var isFirstRow = true;
foreach (var line in lines)
{
var cols = line.Split(sep.ToCharArray());
if (isFirstRow)
{
for (var cIndex = 0; cIndex < numberOfColumns; cIndex++)
tbl.Columns.Add(new DataColumn(cols[cIndex]));
isFirstRow = false;
continue;
}
var dr = tbl.NewRow();
for (var cIndex = 0; cIndex < numberOfColumns; cIndex++)
dr[cIndex] = cols[cIndex];
tbl.Rows.Add(dr);
}
return tbl;

علی فتحی
پنج شنبه 07 بهمن 1395, 00:30 صبح
استاد رحیمی بزرگوار با تشکر دوباره از شما : در یکی از ستونهای فایل متنی تاریخ میلادی وجود داره چگونه فایل متنی رو بین دو تاریخ مشخص میلادی نمایش دهم؟؟

ژیار رحیمی
شنبه 16 بهمن 1395, 16:51 عصر
برای sort کردن ستون Date دیتاتیبل

var orderedRows = from row in dt.AsEnumerable()
let date = DateTime.Parse(row.Field<string>("columnName"), CultureInfo.InvariantCulture)
orderby date
select row;

علی فتحی
سه شنبه 08 فروردین 1396, 21:20 عصر
آیا این کد درسته ؟؟؟؟


OpenFileDialog ofd = new OpenFileDialog(); ofd.Title = "Select file";
ofd.FileName = textBox1.Text;
ofd.Filter = "ALOG_001*.txt|*.txt|All Files(*.*)|*.*";
ofd.FilterIndex = 1;
if (ofd.ShowDialog() == DialogResult.OK)
textBox1.Text = ofd.FileName;


var orderedRows = from row in dt.AsEnumerable()
let date = DateTime.Parse(row.Field<string>("columnName"), CultureInfo.InvariantCulture)
orderby date
select row;

dataGridView1.DataSource = ConvertToDataTable(textBox1.Text,10);

ژیار رحیمی
سه شنبه 08 فروردین 1396, 23:30 عصر
جناب فتحی کدها درست هست اما یه جابجایی در کدها لازم هست تا نتیجه درست بدست آید.شما بعد گرفتن مسیر فایل باید محتوای فایل رو تبدیل به دیتاتیبل سپس کویری مرتب سازی رو روی دیتاتیبل انجام و نتیجه رو به دیتاگرید انتساب بدی.

OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "Select file";
ofd.FileName = textBox1.Text;
ofd.Filter = "ALOG_001*.txt|*.txt|All Files(*.*)|*.*";
ofd.FilterIndex = 1;
if (ofd.ShowDialog() == DialogResult.OK)
{
textBox1.Text = ofd.FileName;
var dt=ConvertToDataTable(textBox1.Text,10);
var orderedRows = from row in dt.AsEnumerable()
let date = DateTime.Parse(row.Field<string>("columnName"), CultureInfo.InvariantCulture)
orderby date
select row;


dataGridView1.DataSource = orderedRows;
}