PDA

View Full Version : مبتدی: تبدیل فیلد متنی به عددی در اکسل با #C



Collector
پنج شنبه 18 اسفند 1390, 20:39 عصر
سلام

من با این برنامه بازدن دکمه add داده هایی عددی را در دیتاگرید قرار میدم و با دکمه save آنها را ذخیره میکنم.
اما داده ها به صورت متن در اکسل ذخیره شده و امکان محاسبه را ندارد.
من میخوام فیلدها را به صورت number ذخیره کنم که نیاز به تبدیل با استفاده از اکسل را نداشته باشد.

banitaba.ommolketab
پنج شنبه 18 اسفند 1390, 20:46 عصر
این روش را باید تست کنی .
قبل از اینکه اططلاعات گرید را در فایل اکسل ذخیره کنی به نوع عددی تبدیل کن . مثلا:

Int32.Parse(dataGridView1.Rows[0].Cells[0].Value);

mp_mp353
پنج شنبه 18 اسفند 1390, 20:50 عصر
Convert.ToInt32(dataGridView1.Rows[0].Cells[0].Value);

mp_mp353
پنج شنبه 18 اسفند 1390, 20:51 عصر
برای ستون دیتا گرید از
CurrentRow هم میتونی استفاده کنید.

banitaba.ommolketab
پنج شنبه 18 اسفند 1390, 20:54 عصر
و روش های متعدد دیگری نیز جهت تبدیل به integer وجود دارد . :تشویق:

Collector
پنج شنبه 18 اسفند 1390, 20:58 عصر
ممنوم که راهنمایی میکنید
من سورس را قرار دادم و با این روش ها هم جواب نمیده.
اگر بشه نوع داده در دیتاگرید را عوض کرد شاید درست بشه.

banitaba.ommolketab
پنج شنبه 18 اسفند 1390, 21:05 عصر
من سورست را نگاه کردم
اگر دقت کنی (روی یکی از سلول های عددی دابل کلیک کن) دو طرف عدد نوشته شده مقداری space وجود داره ، در این صورت اون چیزی که میبینید دیگه عدد نیست.
با استفاده از این دستور قبل از تبدیل به integer فاصله های قبل و بعد اون را حذف میکنی .

Int32.Parse(dataGridView1.Rows[0].Cells[0].Value.ToString().Trim());


خروجی این دستور یک عدد است که میتونی اون را داخل متغیر بریزی و هر نوع محاسبه ای رو روش انجام بدی .
فقط این نکته را بگم که صفرها در dataGridView1.Rows[0].Cells[0] آدرس سلول مورد نظرت هست . که در اینجا به عنوان مثال از صفر استفاده شده .

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

Collector
پنج شنبه 18 اسفند 1390, 21:13 عصر
من سورست را نگاه کردم
اگر دقت کنی (روی یکی از سلول های عددی دابل کلیک کن) دو طرف عدد نوشته شده مقداری space وجود داره ، در این صورت اون چیزی که میبینید دیگه عدد نیست.
با استفاده از این دستور قبل از تبدیل به integer فاصله های قبل و بعد اون را حذف میکنی .

Int32.Parse(dataGridView1.Rows[0].Cells[0].Value.ToString().Trim());


خروجی این دستور یک عدد است که میتونی اون را داخل متغیر بریزی و هر نوع محاسبه ای رو روش انجام بدی .
فقط این نکته را بگم که صفرها در dataGridView1.Rows[0].Cells[0] آدرس سلول مورد نظرت هست . که در اینجا به عنوان مثال از صفر استفاده شده .

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


مشکل حل نشد
من چطوری میتونم داده را به صورت عدد ذخیره کنم.
این دستور فقط تکس را قبول میکند.
dataGridView1.Rows.Add(Int32.Parse("70"));
لطف میکنید روی برنامه تست کنید.

Collector
جمعه 19 اسفند 1390, 17:43 عصر
این خط مشکلش چیه؟

dr[info.HeaderText] = float.Parse(dgv.Rows[i].Cells[info.Name].EditedFormattedValue.ToString());


این ارور را میده

Input string was not in a correct format.

banitaba.ommolketab
جمعه 19 اسفند 1390, 22:15 عصر
Cells[info.Name]
اشتباهه . از index استفاده کن

Collector
شنبه 20 اسفند 1390, 09:30 صبح
Cells[info.Name]
اشتباهه . از index استفاده کن
این مشکل حل شد.

مگه خروجی تابع GetDataGridViewDataSource به اکسل فرستاده نمیشه.
من آنرا Float کردم و لی بازم در اکسل داده ها نیاز به تبدیل دارند.

float result;
bool success;

for (int i = 0; i != dgv.Rows.Count; i++)
{
DataRow dr = dt.NewRow();
foreach (DataGridViewRowInfo info in MyColumns)
{
success = float.TryParse(dgv.Rows[i].Cells[int.Parse(info.Name.ToString())].EditedFormattedValue.ToString(), out result);

if (success == true)
{
dr[info.HeaderText] = result;
}
}
dt.Rows.Add(dr);
}