PDA

View Full Version : جدا کننده اعداد و جمع آنها



mostafa580
شنبه 23 اردیبهشت 1402, 23:14 عصر
با سلام خدمت دوستان من چهار عدد تکست باکس دارم که با کد کاری کردم 3 رقم 3 رقم از هم جدا بشن تا اینجا درست کار میکنه
ولی وقتی میخوام جمع ببندم خطا میگیره اگه امکان داره راهنمایی کنید چطور مشکل رو حل کنم کد برنامه بصورت زیر


private void textBoxX3_Enter(object sender, EventArgs e) {
int result = int.Parse(textBoxX1.Text) + int.Parse(textBoxX2.Text) - int.Parse(textBoxX4.Text);
textBoxX3.Text = result.ToString();
}


private void textBoxX1_TextChanged(object sender, EventArgs e)
{
textBoxX1.Text = Convert.ToInt32(textBoxX1.Text.Replace(",", "")).ToString("n0");
}


private void textBoxX2_TextChanged(object sender, EventArgs e)
{
textBoxX2.Text = Convert.ToInt32(textBoxX2.Text.Replace(",", "")).ToString("n0");
}


private void textBoxX4_TextChanged(object sender, EventArgs e)
{
textBoxX4.Text = Convert.ToInt32(textBoxX4.Text.Replace(",", "")).ToString("n0");
}


private void textBoxX3_TextChanged(object sender, EventArgs e)
{
textBoxX3.Text = Convert.ToInt32(textBoxX3.Text.Replace(",", "")).ToString("n0");
}

پرستو پارسایی
یک شنبه 24 اردیبهشت 1402, 10:36 صبح
ممکن است یکی از تکست باکس ها مقدار دهی نشده باشند یا از کاراکترهای غیر عددی استفاده شده باشد در اینصورت خطا رخ میدهد برای رفع این مشکل میتوانید از کد زیر استفاده کنید


private void textBoxX3_Enter(object sender, EventArgs e){
int num1, num2, num3, result;
if (int.TryParse(textBoxX1.Text.Replace(",", ""), out num1) &&
int.TryParse(textBoxX2.Text.Replace(",", ""), out num2) &&
int.TryParse(textBoxX4.Text.Replace(",", ""), out num3))
{
result = num1 + num2 - num3;
textBoxX3.Text = result.ToString("n0");
}
else
{
textBoxX3.Text = "Invalid Input";
}
}

در این کد، قبل از تبدیل مقادیر ورودی به عدد، با استفاده از try Parse بررسی می‌شود که آیا ورودی حاوی کاراکتر غیرعددی است یا خیر. همچنین، در صورتی که تبدیل موفقیت آمیز نباشد، پیام خطا به کاربر نشان داده می‌شود

mostafa580
یک شنبه 24 اردیبهشت 1402, 20:09 عصر
ممنون از پاسختون ولی الان این کد فقط textbox اخر رو که حاصل رو نشون میده سه رقم سه رقم میکنه در تکستهای ورودی جدا کننده اعمال نمیکنه

mostafa580
یک شنبه 24 اردیبهشت 1402, 20:41 عصر
مشکل با این کد برای تکستهای ورودی حل شد ممنون.

private void textBoxX1_TextChanged(object sender, EventArgs e) {
if (textBoxX1 .Text != string .Empty )
{
textBoxX1.Text = Int64.Parse(textBoxX1.Text.Replace(",", "")).ToString("#,0");
textBoxX1.Select(textBoxX1.TextLength, 0);
}

پرستو پارسایی
یک شنبه 24 اردیبهشت 1402, 21:24 عصر
private void textBoxX3_Enter(object sender, EventArgs e){
int num1, num2, num3, num4, result;
if (int.TryParse(textBoxX1.Text.Replace(",", ""), out num1) &&
int.TryParse(textBoxX2.Text.Replace(",", ""), out num2) &&
int.TryParse(textBoxX3.Text.Replace(",", ""), out num3) &&
int.TryParse(textBoxX4.Text.Replace(",", ""), out num4))
{
result = num1 + num2 - num3 + num4;
textBoxX3.Text = result.ToString("n0");
}
else
{
textBoxX3.Text = "Invalid Input";
}
}

mostafa580
یک شنبه 24 اردیبهشت 1402, 22:15 عصر
فقط مشکل دیگه اینه که موقع ذخیره در دیتابیس که از نوع int تعریف شده خطا میده
واسه اینم راهی هست؟

پرستو پارسایی
دوشنبه 25 اردیبهشت 1402, 10:36 صبح
فقط مشکل دیگه اینه که موقع ذخیره در دیتابیس که از نوع int تعریف شده خطا میده
واسه اینم راهی هست؟


برای رفع مشکل، می‌توانید رشته را بدون کاما ("1,234" به "1234") تبدیل کنید و سپس آن را به عنوان مقدار عددی در دیتابیس ذخیره کنید.
int num1, num2, num3, num4, result;
if (int.TryParse(textBoxX1.Text.Replace(",", ""), out num1) &&
int.TryParse(textBoxX2.Text.Replace(",", ""), out num2) &&
int.TryParse(textBoxX3.Text.Replace(",", ""), out num3) &&
int.TryParse(textBoxX4.Text.Replace(",", ""), out num4))
{
result = num1 + num2 - num3 + num4;
textBoxX3.Text = result.ToString("n0");
int valueToSave = result;
// ذخیره valueToSave در دیتابیس
}
else
{
textBoxX3.Text = "Invalid Input";
}

mostafa580
دوشنبه 25 اردیبهشت 1402, 17:07 عصر
کد بالا حاصلش کلا Invalid Input هست و باز هم موقع ذخیره خطا میده

mostafa580
دوشنبه 25 اردیبهشت 1402, 17:10 عصر
یه سوال اگه داخل sql بجای int داده رو از نوع nvarchar(50) تعریف کنیم که دیگه دردسر نداشته باشیم مشکل خاصی پیش میاد؟

پرستو پارسایی
دوشنبه 25 اردیبهشت 1402, 17:51 عصر
در جدول اسکیو ال، داده نوع int برای ذخیره‌سازی اعداد صحیح با حداکثر بیت ۳۲ بیت (برای نسخه ۳۲ بیتی اسکیو ال) و حداکثر بیت ۶۴ بیت (برای نسخه ۶۴ بیتی اسکیو ال) استفاده می‌شود. این نوع برای ذخیره‌سازی اعداد صحیح، شمارش، اندازه‌گیری و شماره‌گذاری مورد استفاده قرار می‌گیرد.
اگر یک ستون با داده نوع nvarchar(50) در جدول ایجاد کنیم، این به این معناست که در این ستون، می‌توانیم رشته‌هایی با حداکثر ۵۰ کاراکتر (یا ۱۰۰ بایت) را ذخیره کنیم . و مشکلی با ذخیره داده های شما ندارد اگر تعداد کاراکتر رعایت شود.

mostafa580
دوشنبه 25 اردیبهشت 1402, 18:05 عصر
سپاس فراوان از پاسخگویی و راهنماییتون .

mostafa580
دوشنبه 25 اردیبهشت 1402, 18:11 عصر
فقط به عنوان اخرین سوال میخوام ازتون راهنمایی بگیرم
برنامه ای که من نوشتم در هر رکورد یه عکس هم بصورت باینری در دیتابیس ذخیره میکنه که طبیعتا حجم دیتابیس بالا میره
خواستم بپرسم این بالا رفتن حجم دیتابیس از لحاظ فنی مشکل ایجاد نمیکنه؟

پرستو پارسایی
دوشنبه 25 اردیبهشت 1402, 18:44 عصر
فقط به عنوان اخرین سوال میخوام ازتون راهنمایی بگیرم
برنامه ای که من نوشتم در هر رکورد یه عکس هم بصورت باینری در دیتابیس ذخیره میکنه که طبیعتا حجم دیتابیس بالا میره
خواستم بپرسم این بالا رفتن حجم دیتابیس از لحاظ فنی مشکل ایجاد نمیکنه؟


ذخیره عکس به صورت باینری در دیتابیس، می‌تواند حجم دیتابیس را بالا ببرد و در صورتی که این عکس‌ها بسیار بزرگ باشند، ممکن است به مشکلاتی از جمله کاهش سرعت عملکرد دیتابیس، مشکلات در انتقال داده‌ها، نیاز به فضای ذخیره بیشتر و... منجر شود.


بهترین روش برای ذخیره عکس‌ها در دیتابیس، ذخیره مسیر فایل عکس به جای ذخیره‌ی خود عکس در دیتابیس است. در این روش، تنها مسیر عکس در دیتابیس ذخیره می‌شود و خود عکس در سیستم قرار دارد. این روش علاوه بر کاهش حجم دیتابیس، امکان جستجو و مدیریت بهتری را فراهم می‌کند و همچنین از لحاظ عملکردی نیز بهینه‌تر است.


بنابراین، بهترین روش برای ذخیره عکس‌ها در دیتابیس، ذخیره مسیر عکس است.
ولی اگر عکس ها نمیخواهید در سیستم بارگذاری یا نگهداری کنید و حتما باید در دیتابیس ذخیره شوند . باید مشکلاتی را که عنوان کردم را بپذیرید. چون اطلاعی از علت ذخیره در دیتابیس را نمیدانم همینقدر میتوانم پاسخ دهم
توجه فرمائید در SQL Server Express به طور پیش‌فرض قابلیت ذخیره‌سازی تا ۱۰ گیگابایت می باشد

mostafa580
دوشنبه 25 اردیبهشت 1402, 19:17 عصر
اوکی صد در صد پیشنهاد شماره برای ذخیره مسیر عکس بهتره و روش ذخیره مسیر عکس هم بلدم فقط چه کدی در رویداد mouse up دیتا گرید باید بنویسم که وقتی روی رکورد خاصی کلیک میکنیم عکس اون رکورد هم فراخونی بشه و در پیکچر باکس ظاهر بشه؟

پرستو پارسایی
دوشنبه 25 اردیبهشت 1402, 20:33 عصر
private void dataGridView1_MouseUp(object sender, MouseEventArgs e){
if (e.Button == MouseButtons.Left)
{
DataGridView.HitTestInfo hitTestInfo = dataGridView1.HitTest(e.X, e.Y);
if (hitTestInfo.RowIndex >= 0)
{
// Get the value of the first cell in the row
string imageFilePath = dataGridView1.Rows[hitTestInfo.RowIndex].Cells[0].Value.ToString();


// Load the image into the picture box
pictureBox1.Image = Image.FromFile(imageFilePath);
}
}
}

در این کد، ابتدا دریافت می‌کنیم که کدام ردیف در دیتا گرید انتخاب شده است. سپس، با استفاده از مقدار اولین سلول در ردیف انتخاب شده، مسیر فایل عکس را بارگیری می‌کنیم و آن را در پیکچر باکس نمایش می‌دهیم. لازم به ذکر است که می‌بایستی مسیر فایل عکس را به شیوه‌ای که در دیتا گرید قرار دارد ذخیره کنید.

پرستو پارسایی
دوشنبه 25 اردیبهشت 1402, 20:49 عصر
کد بالا حاصلش کلا Invalid Input هست و باز هم موقع ذخیره خطا میده

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

private void button1_Click(object sender, EventArgs e){
Regex regex = new Regex(@"^[0-9,-]+$"); // تعریف یک الگوی Regular Expression برای ورودی‌های عددی
if (regex.IsMatch(textBoxX1.Text) && regex.IsMatch(textBoxX2.Text) && regex.IsMatch(textBoxX3.Text) && regex.IsMatch(textBoxX4.Text))
{
int num1 = int.Parse(textBoxX1.Text.Replace(",", ""));
int num2 = int.Parse(textBoxX2.Text.Replace(",", ""));
int num3 = int.Parse(textBoxX3.Text.Replace(",", ""));
int num4 = int.Parse(textBoxX4.Text.Replace(",", ""));
int result = num1 + num2 - num3 + num4;
textBoxX3.Text = result.ToString("n0");
// ذخیره مقدار textBoxX3 در دیتابیس
}
else
{
textBoxX3.Text = "Invalid Input";
}

}

mostafa580
سه شنبه 26 اردیبهشت 1402, 01:11 صبح
ممنون از وقتی که میزارید و با حوصله جواب میدید.
من مقادیری رو در فرم قرار دادم که در دیتا بیس ذخیره میشه و مثلا آدرس عکس رو در تکستی بنام txt_filelog قرار میدم
الان موقع لود اطلاعات که بصورت زیر میباشد

private void dgv_ranande_MouseUp_1(object sender, MouseEventArgs e) {
txt_id.Text = dgv_ranande[0, dgv_ranande.CurrentRow.Index].Value.ToString();
txt_nam.Text = dgv_ranande[1, dgv_ranande.CurrentRow.Index].Value.ToString();
txt_cod.Text = dgv_ranande[2, dgv_ranande.CurrentRow.Index].Value.ToString();
txt_meli.Text = dgv_ranande[3, dgv_ranande.CurrentRow.Index].Value.ToString();
txt_gavahi.Text = dgv_ranande[4, dgv_ranande.CurrentRow.Index].Value.ToString();
txt_tel.Text = dgv_ranande[5, dgv_ranande.CurrentRow.Index].Value.ToString();
txt_vasile.Text = dgv_ranande[6, dgv_ranande.CurrentRow.Index].Value.ToString();
txt_pelak.Text = dgv_ranande[7, dgv_ranande.CurrentRow.Index].Value.ToString();



}

الان کد مربوط به txt_filelog رو چجوری بنویسم که مثلا در pictureBox1 عکس نمایش داده بشه

mostafa580
سه شنبه 26 اردیبهشت 1402, 02:02 صبح
در واقع مثلا جوری باشه که picturebox آدرسشو از txt_filelog بخونه و نمایش بده.

پرستو پارسایی
سه شنبه 26 اردیبهشت 1402, 10:38 صبح
در واقع مثلا جوری باشه که picturebox آدرسشو از txt_filelog بخونه و نمایش بده.

private void txt_filelog_TextChanged(object sender, EventArgs e){
// بررسی اینکه فایل انتخاب شده وجود دارد
if (File.Exists(txt_filelog.Text))
{
// خواندن تصویر از فایل
Image img = Image.FromFile(txt_filelog.Text);

// نمایش تصویر در pictureBox1
pictureBox1.Image = img;
}
}

mostafa580
سه شنبه 26 اردیبهشت 1402, 16:53 عصر
واقعا خیلی لطف کردین ممنون.

mostafa580
سه شنبه 26 اردیبهشت 1402, 17:13 عصر
ببخشید من یک سوال دیگه از شما داشتم اینکه خب حجم دیتابیس من چون مقادیر تستی داخلش وارد کردم زیاد شده خصوصا اینکه عکس هم داخلش ذخیره شده بود
الان اطلاعات رو پاک میکنم ولی خب حجم دیتابیس پایین نمیاد چه را هی وجود داره که حجم رو پایین بیارم؟
استفاده از نرم افزار db browser خوبه؟

پرستو پارسایی
سه شنبه 26 اردیبهشت 1402, 18:33 عصر
ببخشید من یک سوال دیگه از شما داشتم اینکه خب حجم دیتابیس من چون مقادیر تستی داخلش وارد کردم زیاد شده خصوصا اینکه عکس هم داخلش ذخیره شده بود
الان اطلاعات رو پاک میکنم ولی خب حجم دیتابیس پایین نمیاد چه را هی وجود داره که حجم رو پایین بیارم؟
استفاده از نرم افزار db browser خوبه؟
متوجه نشدم منظورتان از اینکه حجم پایین نمیاد چی هست آیا میخواهید داده های دیتابیس را کاملا حذف کنید؟

mostafa580
سه شنبه 26 اردیبهشت 1402, 19:10 عصر
بله میخوام داده دیتابیس که بصورت تستی وارد کرده بودم حذف کنم ولی وقتی کل داده ها رو پاک میکنم حجم دیتابیس همچنان بالاست

پرستو پارسایی
سه شنبه 26 اردیبهشت 1402, 20:38 عصر
برای حذف اطلاعات کامل یک تیبل :

using System.Data.SqlClient;

// ...


string connectionString = "اسکیوال کانکشن";
string tableName = "نام تیبل";
string sql = "TRUNCATE TABLE " + tableName + ";";


using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.CommandType = CommandType.Text;
connection.Open();
command.ExecuteNonQuery();
}
}

و برای حذف داده های کل تیبل ها در صورتیکه اجازه دسترسی باشد.
using System.Data.SqlClient;

// ...


string connectionString = "اسکیوال کانکشن";


using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();


SqlCommand command = new SqlCommand("EXEC sp_MSForEachTable 'TRUNCATE TABLE ?'", connection);
command.ExecuteNonQuery();


connection.Close();
}