مشکل در خواندن اطلاعات از DataTable
سلام
کد زیر اطلاعات رو به درستی از اکسل به DataTable میریزه و در DataGridView به درستی نشون میده
فقط مشکلی که هست اینه که در قسمتی که میخوام با if بررسی کنم در سطر اول ستون اول مقدار اگه فلان بود فلان کار رو بکن این بررسی به درستی انجام نمیشه
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog of = new OpenFileDialog();
of.Filter = "Excel 2007 Files|*.xlsx";
of.Title = "Open Excel 2007 Files";
DialogResult dr = new DialogResult();
dr = of.ShowDialog();
if (dr == DialogResult.Cancel)
return;
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;
Data Source= " + of.FileName + " ;Extended Properties=\"Excel 12.0;HDR=No;\"";
string strSQL = "SELECT * FROM [Sheet1$]";
OleDbConnection excelConnection = new OleDbConnection(connectionString);
excelConnection.Open();
OleDbCommand dbCommand = new OleDbCommand(strSQL, excelConnection);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand);
DataTable dTable = new DataTable();
dataAdapter.Fill(dTable);
DataGridView1.DataSource = dTable;
int yCoord = DataGridView1.CurrentCellAddress.X;
int n= dTable.Rows.Count;
if (dTable.Rows[0][0] == "iran")
{
label1.Text = "IRAN";
}
dTable.Dispose();
dataAdapter.Dispose();
dbCommand.Dispose();
excelConnection.Close();
excelConnection.Dispose();
}
نقل قول: مشکل در خواندن اطلاعات از DataTable
الان این dTable.Rows[0][0] چی برمیگردونه؟
نقل قول: مشکل در خواندن اطلاعات از DataTable
فايل اكسل رو براتون ميزارم
لينك دانلود فايل اكسل
نقل قول: مشکل در خواندن اطلاعات از DataTable
listeDaro.Rows[1][0].ToString()=="iran"
البته فکر کنم شما موقعی که میخواین روی دیتاگرید کلیک کردید این شرط چک بشه. درسته؟
نقل قول: مشکل در خواندن اطلاعات از DataTable
نقل قول:
نوشته شده توسط
amir200h
listeDaro.Rows[1][0].ToString()=="iran"
البته فکر کنم شما موقعی که میخواین روی دیتاگرید کلیک کردید این شرط چک بشه. درسته؟
در واقع ميخوام تو كل اين DataTable بگرده و هر جا كه به اون كلمه رسيد يه عملي رو انجام بده
اين كاري كه گفتيد هم جواب نداد
نقل قول: مشکل در خواندن اطلاعات از DataTable
سلام.
شرط رو بصورت زیر تغییر بدید. فکر میکنم مشکلتون حل بشه :
if (dTable.Rows[0][0].ToString().Trim() == "iran")
{
label1.Text = "IRAN";
}
نقل قول: مشکل در خواندن اطلاعات از DataTable
اگه دقیق بگین چی میخواین و چیکار میخواین کنین زودتر بجواب میرسین
نقل قول: مشکل در خواندن اطلاعات از DataTable
نقل قول:
نوشته شده توسط
veniz2008
سلام.
شرط رو بصورت زیر تغییر بدید. فکر میکنم مشکلتون حل بشه :
if (dTable.Rows[0][0].ToString().Trim() == "iran")
{
label1.Text = "IRAN";
}
حل شد مشکل همون Trim() بود
نقل قول: مشکل در خواندن اطلاعات از DataTable
حالا اگه بخوام با یه دستور for کل اون DataTable رو بگردم چه باید کرد؟
همونطوری که در فایل اکسل میبینید دو ستون وجود دارد که اولی نام شهرها است و ستون دوم عددی است که به آن اختصاص داده شده
بر فرض در ستون اول دو بار کلمه "تهران" داریم برنامه باید عدد اونها رو که در ستون دوم هست باهم جمع کنه
نقل قول: مشکل در خواندن اطلاعات از DataTable
نقل قول:
نوشته شده توسط
mehran63
حالا اگه بخوام با یه دستور for کل اون DataTable رو بگردم چه باید کرد؟
فکر نکنم با یه دستور بشه ، اگر بشه که منم مشتاقم یاد بگیرم
اما می تونین با دو تا حلقه i,j که به سطر و ستون اشاره می کنه
مقادیر رو داخل حلقه بدست بیارین
نقل قول: مشکل در خواندن اطلاعات از DataTable
حالا با همون دو حلقه چطور این کار رو باید انجام داد؟
نقل قول: مشکل در خواندن اطلاعات از DataTable
خیلی ساده
int a = 0;
for (int i = 0; i < dTable.Rows.Count -1; i++)
{
if (dTable.Rows[i][0] == "تهران")
{
a += (int)dTable.Rows[i][1];
}
}
نقل قول: مشکل در خواندن اطلاعات از DataTable
نقل قول:
نوشته شده توسط
esafb52
خیلی ساده
int a = 0;
for (int i = 0; i < dTable.Rows.Count -1; i++)
{
if (dTable.Rows[i][0] == "تهران")
{
a += (int)dTable.Rows[i][1];
}
}
به شكل زير درست شد
a += convert.toint32(dTable.Rows[i][1]);
حالا يه مسئله ديگه كه بهش برخورد كردم
بر فرض در يك جا نوشته شده "شمال تهران" در جاي ديگه نوشته شده "تهران" در جايي هم نوشته "تهران جنوب" هر سه اين فيلدها در بررسي كه انجام ميشود يكي هستند.
ولي وقتي در if كلمه "تهران" را بررسي ميكنيم فقط همان كلمه تهران را در بررسي درست ميشناسد و براي كلمات "تهران جنوب" و "شمال تهران" برنامه به خارج از if هدايت ميشود
نقل قول: مشکل در خواندن اطلاعات از DataTable
دوست عزی باز هم خیلی ساده است از متد کونتین استفاده کن
int a = 0;
for (int i = 0; i < dTable.Rows.Count; i++)
{
string s = dTable.Rows[i][0].ToString();
if (s.Contains("تهران"))
{
a += Convert.ToInt32(dTable.Rows[i][1]);
}
}
نقل قول: مشکل در خواندن اطلاعات از DataTable
با سلام.
می توانید برای اینکه مطمئن شوید رشته دوم در رشته اول موجود است از تابع IndexOf استفاده کنید.
برای به دست آوردن تعداد تکرار آیتمها از روش تاپیک زیر هم می توانید استفاده کنید:
نقل قول: مشکل در خواندن اطلاعات از DataTable
دوستان متشکر از لطفتون اون مسایل حل شد، ولی یه مسئله دیگه
برنامه رو به شکل زیر نوشتم
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog of = new OpenFileDialog();
of.Filter = "Excel 2007 Files|*.xlsx";
of.Title = "Open Excel 2007 Files";
DialogResult dr = new DialogResult();
dr = of.ShowDialog();
if (dr == DialogResult.Cancel)
return;
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;
Data Source= " + of.FileName + " ;Extended Properties=\"Excel 12.0;HDR=No;\"";
string strSQL = "SELECT * FROM [QueryExportToExcel$]";
OleDbConnection excelConnection = new OleDbConnection(connectionString);
excelConnection.Open();
OleDbCommand dbCommand = new OleDbCommand(strSQL, excelConnection);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand);
DataTable dTable = new DataTable();
dataAdapter.Fill(dTable);
DataGridView1.DataSource = dTable;
int tehran = 0;
int esfahan = 0;
int shiraz = 0;
for (int i = 0; i < dTable.Rows.Count; i++)
{
string s=dTable.Rows[i][0].ToString().Trim();
if (s.Contains ( "تهران"))
{
tehran += Convert.ToInt32(dTable.Rows[i][1]) * 2;
}
if (s.Contains( "اصفهان"))
{
esfahan += Convert.ToInt32(dTable.Rows[i][1]) * 3;
}
if (s.Contains( "شیراز"))
{
shiraz += Convert.ToInt32(dTable.Rows[i][1]) * 5;
}
}
label1.Text ="امتیاز:"+ (tehran + esfahan + shiraz).ToString();
dTable.Dispose();
dataAdapter.Dispose();
dbCommand.Dispose();
excelConnection.Close();
excelConnection.Dispose();
}
}
فایل Excel مربوط به برنامه
همانطور که میبینید اطلاعات از یه فایل Excel خوانده شده و در DataTable ریخته میشه و از اونجا برای عملیاتی که نیاز دارم استفاده میکنم
همانطور که در برنامه میبینید به ازای هر شهری که در فایل excel وجود دارد یک If گذاشتم
مشکل ایجاست که اگه یه شهر به این فایل اکسل اضافه بشه اونوقت من باید برنامه رو دوباره تغییر بدم و یه If دیگه هم واسه اون اضافه کنم.
برای رفع این مشکل چه کنم که دوباره برنامه رو تغییر ندم؟