نمایش نتایج 1 تا 9 از 9

نام تاپیک: مشكل در برنامه نويسي

  1. #1

    Smile مشكل در برنامه نويسي

    کد زیر اطلاعات رو به درستی از اکسل به DataTable میریزه و در DataGridView به درستی نشون میده
    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 دیگه هم واسه اون اضافه کنم.
    برای رفع این مشکل چه کنم که دوباره برنامه رو تغییر ندم؟
    آخرین ویرایش به وسیله mehran63 : پنج شنبه 24 مرداد 1392 در 23:54 عصر

  2. #2

    نقل قول: مشكل در برنامه نويسي

    اگه از اصفهان به بعد 2 تا 2 تا اضافه میشه (منظورم ضریب هست) می تونی بعد از if تهران یه else بنویسی و +=2 کنی if های بعد از تهران هم لازم نیست.

  3. #3

    نقل قول: مشكل در برنامه نويسي

    نه؛ اون اعداد ترتيبي نداره

  4. #4

    نقل قول: مشكل در برنامه نويسي

    پس باید ضریب رو هم در فایل اکسل ذخیره کنید و مستقیماً اون رو بخونید و ضرب کنید چون شما به دلیل وجود ضرایب مختلف if اضافه می کنید.

    int counter;
    for (int i = 0; i < dTable.Rows.Count; i++)
    {
    counter+=int.Parse(dTable.Rows[i][1].ToString().Trim());//ضرایب

  5. #5

    نقل قول: مشكل در برنامه نويسي

    فيلدهاي فايل اكسل دست من نيست
    در واقع اين برنامه كارش اينه كه فايل اكسل رو كه كاربر در برنامه انتخاب ميكنه امتيازش رو حساب ميكنه
    اين فايل اكسل خروجي يك برنامه حسابداريه، به همين خاطر امكان داره نام شهرها اضافه بشه. همچنين ضريب هر شهر هم در مقاطعي تغيير ميكنه

  6. #6

    نقل قول: مشكل در برنامه نويسي

    من در برنامم دو تا مشکل دارم
    یه فایل اکسل دارم که باید تک تک رکوردهاش رو بررسی کنم تا با هر کدوم یه رفتاری رو انجام بدم (همون ضرایب) در واقع این برنامه برای یک فایل اکسل نیست، برای فایل های اکسلی است که نام شهرها و ضرایب آن هم با نظر کاربر در فایل اکسل تغییر میکند(البته لازم به توضیح است که ضرایب در فایل اکسل وجود ندارد). این برنامه در واقع باید این انعطاف رو داشته باشه که با این تغیرات بتونه درست کار کنه
    آخرین ویرایش به وسیله mehran63 : جمعه 25 مرداد 1392 در 11:15 صبح

  7. #7

    نقل قول: مشكل در برنامه نويسي

    یه switch بنویسید که همه استان های ممکن رو شامل باشه.

  8. #8
    مدیر بخش آواتار مهرداد صفا
    تاریخ عضویت
    تیر 1391
    محل زندگی
    select Country,City From World where Country.Name=IRAN and City.Contains(حضرت معصومه(ع))
    پست
    1,499

    نقل قول: مشكل در برنامه نويسي

    با سلام.
    دوستان توجه داشته باشید که علت بیشتر از 90 درصد تاپیکهایی که در انجمن ایجاد می شوند "مشکل در برنامه نویسی" است. حالا شما فرض کنید که تمام این نوع تاپیکها با عنوان "مشکل در برنامه نویسی" ایجاد شوند!!! چه اتفاقی خواهد افتاد؟ (حداقل) خود شما بعد از یک مدت و با ایجاد چند تاپیک چگونه آنها را از یکدیگر تشخیص خواهید داد؟

    عنوان تاپیک شما باید حداکثر مطابقت با مطالب مطرح شده در آن را داشته باشد تا:
    1- فرد دیگری که با همین مشکل رو به روست با دیدن نام تاپیک به آن هدایت شود.
    2- موتور های جستجو مثل گوگل روی عنوان صفحات و متن درون heading ها که در اینجا همان عنوان تاپیک است حساسیت بیشتری دارند و درنتیجه افراد بیشتری که به دنبال موضوعات مطرح شده در تاپیک هستند از طریق گوگل و .. به تاپیک هدایت می شوند و به جواب خود می رسند.
    3- دوستان عزیزی که ممکن است به جواب سوال شما واقف باشند و قصد کمک کردن دارند سریعتر به تاپیک هدایت می شوند ودر نتیجه شما هم زودتر به جواب می رسید.
    4- در نتیجه موارد فوق تعداد تاپیهای تکراری کمتر شده و تاپیکها پربارتر می شوند.

    مدیران محترم لطفا این تاپیک رو حذف و ویرایش نکنید بلکه دوستانی که به این مطلب برخورد می کنند موارد بالا رو مد نظر داشته باشند.
    چشم ظاهر گر نبیند عیب نیست چشم دل گر ننگرد باید گریست
    **********
    اَلسَّلامُ عَلَى الْحُسَيْنِ وَ عَلى عَلِىِّ بْنِ الْحُسَيْنِ وَ عَلى اَوْلادِ الْحُسَيْنِ وَ عَلى اَصْحابِ الْحُسَيْنِ

  9. #9
    کاربر دائمی آواتار cherchil_hra
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    تهران
    پست
    162

    نقل قول: مشكل در برنامه نويسي

    شما می توانید یک جدول به عنوان ضریب ایجاد بکنید و با جدول بدست آمده از فایل اکسل، آن را ادغام کنید. اگر همه کاربران از یک ضریب استفاده می کنند و ضریب ها براساس کاربر تغییر نمی کند select بدون شرط در غیر این صورت کوئری select روی جدول ضریبتون از رو براساس کاربر ایجاد می کنید.

    برای نمونه من جدول رو به صورت دستی در برنامه ایجاد کردم که کلید اصلی F1 هست:
    f1 : نام شهر (که همنام با ستون فایل اکسل شماست) | factor: ضریب مصرف

    private DataTable FillFactor()
    {
    var dt = new DataTable("MyTown");

    dt.Columns.Add("f1", typeof (string));
    dt.Columns.Add("Factor", typeof (int));

    dt.PrimaryKey = new[] { dt.Columns[0] };

    dt.Rows.Add("تهران", 2);
    dt.Rows.Add("اصفهان", 3);
    dt.Rows.Add("شیراز", 5);

    return dt;
    }


    اول از همه دستور Select رو به شکل زیر تغییر بده تا براساس شهر مقادیر با هم جمع بشوند:
     string strSQL = "SELECT f1,sum(f2) as [sum]  FROM [Sheet1$] group by f1";


    f1 و f2 اسم ستون هات هست که با انتخاب فایل و دستور select * در دیتاگرید نشون داد.
    f1 رو کلید اصلی قرار میدی.

    حالا کاری که باید انجام بشه ادغام دو جدول باهم هست که با دستور زیر انجام می شود:
    dTable.Merge(dt);

    بدین ترتیب ستون های همنام و کلید (یعنی F1) با هم ادغام می شوند.

    حالا شما باید یک ستون محاسباتی ایجاد کنید که از ضرب دو ستون sum و factor به وجود می آید:
     dTable.Columns.Add("result", typeof (int));
    dTable.Columns["Result"].Expression = "sum * Factor";


    در نهایت حاصل جمع سطرها رو بدین ترتیب محاسبه می کنیم:
    label1.Text = "امتیاز:"+dTable.Compute("sum(Result)", "").ToString();


    که در کل کد button1_Click شما اینجوری میشه:

    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;\"";

    var dt = FillFactor();
    string strSQL = "SELECT f1,sum(f2) as [sum] FROM [Sheet1$] group by f1";

    OleDbConnection excelConnection = new OleDbConnection(connectionString);
    excelConnection.Open();

    OleDbCommand dbCommand = new OleDbCommand(strSQL, excelConnection);
    OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand);

    DataTable dTable = new DataTable();
    dTable.PrimaryKey = new[] { dTable.Columns["f1"] };
    dataAdapter.Fill(dTable);

    dTable.Merge(dt);
    dTable.Columns.Add("result", typeof (int));
    dTable.Columns["Result"].Expression = "sum * Factor";
    label1.Text = "امتیاز:"+dTable.Compute("sum(Result)", "").ToString();
    DataGridView1.DataSource = dTable;

    dTable.Dispose();
    dataAdapter.Dispose();
    dbCommand.Dispose();

    excelConnection.Close();
    excelConnection.Dispose();
    }



    موفق باشید!

تاپیک های مشابه

  1. مبتدی: مشكل در برنامه نويسي 2 ورودي بدون خروجي
    نوشته شده توسط vajeh12 در بخش برنامه نویسی با MFC و ++Visual C
    پاسخ: 1
    آخرین پست: شنبه 19 اسفند 1391, 17:18 عصر
  2. مشكل در برنامه نويسي و فيلدهاي نرم افزار كتابداري
    نوشته شده توسط DlphIran در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 12
    آخرین پست: سه شنبه 24 شهریور 1388, 12:20 عصر
  3. مشكل ارسال SMS بعد از برنامه نويسي
    نوشته شده توسط m_nejad در بخش برنامه نویسی موبایل
    پاسخ: 2
    آخرین پست: شنبه 27 تیر 1388, 17:13 عصر
  4. مشكل برنامه نويسي گرافيك در c
    نوشته شده توسط pooyan3000 در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 6
    آخرین پست: شنبه 16 خرداد 1388, 18:49 عصر
  5. سوال: مشكل در برنامه نويسي با دلفي
    نوشته شده توسط asoft86 در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 3
    آخرین پست: سه شنبه 30 مهر 1387, 16:50 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •