PDA

View Full Version : سوال: نمايش سه رقم سه رقم عدد در gridview



tara1367
شنبه 10 اردیبهشت 1390, 10:32 صبح
سلام
چگونه مي توان عدد را بصورت سه رقم سه رقم در gridview نمايش داد؟
با تشکر

نیما حتمی
شنبه 10 اردیبهشت 1390, 10:38 صبح
با سلام در رویداد cellend editگریدت این کد رو بنویس البته اون عدد 8 که من نوشتم مربوط به شماره سلولی هست که می خوای عددت 3رقم 3 رقم بشه خودت تنظیم کن:


try
{
if (dataGridView1.CurrentCell.ColumnIndex == 8 || dataGridView1.CurrentCell.ColumnIndex == 9)
{
dataGridView1.CurrentCell.Value = decimal.Parse(dataGridView1.CurrentCell.Value.ToSt ring()).ToString("#,#");
}
}
catch (Exception exp)
{

}

tara1367
یک شنبه 11 اردیبهشت 1390, 10:53 صبح
ممنون جواب ميده ولي قبلش يک error ميده بعد اجرا مي شه:
System.NullReferenceException:object refrence not set to an instance of an object
من کد رو در رويداد form_load‌ نوشتم چون مي خوام زمان load شدن گريد ويو نيز اعداد جدا شوند.

araz_pashazadeh
دوشنبه 25 مهر 1390, 11:31 صبح
با سلام خدمت دوستان
همون طوری که دوستمون گفتن این کار باید در زمان لود گرید انجام بشه تا کاربر اطلاعات را به اون صورت ببینه.
لطفا در این مورد بیشتر توضیح بدین اکثر دوستان در این مورد با مشکل مواجه هستن.

nilmil_nil
دوشنبه 25 مهر 1390, 11:42 صبح
سلام فکر کنم این کارت رو راه بندازه

private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
e.Cancel = true;
}

nilmil_nil
دوشنبه 25 مهر 1390, 11:42 صبح
این باعث میشه که Error رو نادیده بگیره اگه نشد بگید یه راه حل بهتر بهت بگم

araz_pashazadeh
دوشنبه 25 مهر 1390, 13:09 عصر
سلام فکر کنم این کارت رو راه بندازه

private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
e.Cancel = true;
}

دوست عزیز من از این کد استفاده کردم ولی باز به نتیجه نرسیدم من نمی تونم اطلاعات را هنگام بایند شدن گرید 3رقم 3رقم جدا کنم لطفا بیشتر راهنمایی کنین اگر نمونه برنامه ای در این زمینه باشه ممنون میشم در اختیار من و دوستان قرار بدین.

nilmil_nil
دوشنبه 25 مهر 1390, 19:23 عصر
یه راه همینجوری به ذهنم رسید
میگم تست کن حتما جواب میگیری
بیا یه حلقه بذار بعد از لود شده تمام سطر ها تو گرید
و توی حلقه بیا سطر به سطر اون ستونی که میخوای سه رقم سه رقم جدا بشه رو با مقدار جدا شده جایگزین کن
درست میشه

wolf_majid
دوشنبه 25 مهر 1390, 22:21 عصر
بهتره این کار رو توی رویداد form_shown انجام بدید نه form_load

gwbasic
سه شنبه 26 مهر 1390, 10:05 صبح
روش های زیادی وجود داره که بهترینش ساخت یه DataGridViewColumn مخصوص این کار هست که البته نیاز به مهارت بیشتری هست!
ولی یک راه ساده اینکه توی رویداد CellFormatting کد زیر رو بنویسید

if (e.ColumnIndex == MyColumn)
{
double d = double.Parse(e.Value.ToString());
e.Value = d.ToString("N0");
}


N0 برای این هست که سه رقم سه رقم جدا کنه و اگه می خواین اعشار هم داشته باشه باید بجای 0 تعداد رقم اعشار رو قرار بدین

البته یه مشکل کوچیک وجود داره اونم اینه که اگه برای ویرایشروی سلول مورد نظر کلیک کنید کاما ها رو بر نمی داره که البته قابل حله اگه این مسئله باتون مهمه بگین تا توضیح بدم

faravaghi
سه شنبه 26 مهر 1390, 10:50 صبح
سلام گرامی،
از این تابع می تونید استفاده کنید و اونو تو یک کلاس بنویسید و هنگام لود شدن فرم این تابع رو فراخوانی کنید. خط اوش همینه که شما می خواین بقیه اش اگه لازم ندارین توضیحی کنید.
protected internal void SetFormatting(DataGridView Dg, string CellName)
{
Dg.Columns[CellName].DefaultCellStyle.Format = "C0";
Dg.Columns[CellName].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
Dg.DefaultCellStyle.NullValue = "***";
Dg.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
Dg.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;
}

araz_pashazadeh
سه شنبه 26 مهر 1390, 13:11 عصر
روش های زیادی وجود داره که بهترینش ساخت یه DataGridViewColumn مخصوص این کار هست که البته نیاز به مهارت بیشتری هست!
ولی یک راه ساده اینکه توی رویداد CellFormatting کد زیر رو بنویسید

if (e.ColumnIndex == MyColumn)
{
double d = double.Parse(e.Value.ToString());
e.Value = d.ToString("N0");
}


N0 برای این هست که سه رقم سه رقم جدا کنه و اگه می خواین اعشار هم داشته باشه باید بجای 0 تعداد رقم اعشار رو قرار بدین

البته یه مشکل کوچیک وجود داره اونم اینه که اگه برای ویرایشروی سلول مورد نظر کلیک کنید کاما ها رو بر نمی داره که البته قابل حله اگه این مسئله باتون مهمه بگین تا توضیح بدم
دوست عزیز شما به نکته خوبی اشاره کردین من قبلا می خواستم به همین صورتی که شما می گین این کار را انجام بدم ولی متاسفانه با مشکل مواجه شدم و لینک تاپیکی که در این مورد مطرح کردم را براتون میزام لطفا به کدی که در اونجا نوشتم نگاه کنین و تغیراتی که لازم هست را بگین تا اعمال کنم.
http://barnamenevis.org/showthread.php?309454-%D8%AC%D8%AF%D8%A7-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AF%D8%A7%D8%AE%D9%84-%DA%AF%D8%B1%DB%8C%D8%AF

araz_pashazadeh
سه شنبه 26 مهر 1390, 13:33 عصر
سلام گرامی،
از این تابع می تونید استفاده کنید و اونو تو یک کلاس بنویسید و هنگام لود شدن فرم این تابع رو فراخوانی کنید. خط اوش همینه که شما می خواین بقیه اش اگه لازم ندارین توضیحی کنید.
protected internal void SetFormatting(DataGridView Dg, string CellName)
{
Dg.Columns[CellName].DefaultCellStyle.Format = "C0";
Dg.Columns[CellName].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
Dg.DefaultCellStyle.NullValue = "***";
Dg.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
Dg.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;
}
دوست عزیز من با استفاده از خط اول کدی که قرار داده بودین تا حدودی مشکلم حل شد ولی در جلوی فیلدهای من عبارت ریال قرار می ده چطوری میشه این را حذف کرد؟
آیا امکان چنین کاری هست؟
یا باید از یک فرمت دیگه استفاده کنم؟

faravaghi
سه شنبه 26 مهر 1390, 13:40 عصر
سلام مهربون،
نه دیگه!!!
این همین جوریه یعنی فرمت، فرمت پوله. من امتحان نکردم ولی کار نشد نداره.

tara1367
سه شنبه 26 مهر 1390, 13:40 عصر
اصلا خودم جوابشو پيدا كردم ساده ترين روش بدون نياز به كد نويسي زياد:
اگر ستونها رو دستي به برنامه اضافه مي كنيد بايستي Edit Column را انتخاب كرده و روي هر ستوني كه مي خواهيد مقدارش سه رقم سه رقم جدا شه كليك كرده و از قسمت DefaultCellStyle گزينه Format را انتخاب كنيد ولي اگر با كد نويسي به DataGrid ستون مي دهيد بايستي پس از تعريف ستون اين كد را بنويسيد مثلا:

dataGridView1.Columns[20].HeaderText = "";
dataGridView1.Columns[20].Width = 80;
dataGridView1.Columns[20].DefaultCellStyle.Format = "N0";

gwbasic
سه شنبه 26 مهر 1390, 13:41 عصر
دوست عزیز من با استفاده از خط اول کدی که قرار داده بودین تا حدودی مشکلم حل شد ولی در جلوی فیلدهای من عبارت ریال قرار می ده چطوری میشه این را حذف کرد؟
آیا امکان چنین کاری هست؟
یا باید از یک فرمت دیگه استفاده کنم؟

فرمت C برای Currency پول استفاده می شه اگه نیازی ندارین از همون N که اشاره کردم استفاده کنید

faravaghi
سه شنبه 26 مهر 1390, 13:44 عصر
سلام گلم،
این جوری امتحان کن. جواب میده:
protected internal void SetFormatting(DataGridView Dg, string CellName)
{
Dg.Columns[CellName].DefaultCellStyle.Format = "N0";
}

لینک منبع (http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx)

araz_pashazadeh
سه شنبه 22 آذر 1390, 18:20 عصر
منون از راهنمایی شما من دقیقا از همین روش استفاده کردم ولی من می خوام وقتی کاربر در دیتاگرید اطلاعات را وارد کرد در حین وارد کردن اطلاعات اطلاعات همزمان 3رقم 3رقم جدا بشه من برای این کار کد زیر را نوشتم مشکلی هم ندلره ولی وقتی می خوام اطلاعات را داخل سلول قرار بدم خطا می ده چون فیلد موجود در پایگاه از نوع دسیمال هستش و اطلاعاتی که من قرار می دم از نوع رشته هستش.
جالب اینجاست که گرید همین کار را انجام میده ولی نمی دونم چطور.
private void txtCash_KeyUp(object sender, KeyEventArgs e)
{
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalDigits = 0;
string ss = Decimal.Parse(dataGridViewBankAccount.CurrentRow.C ells["Cash"].EditedFormattedValue.ToString().Remove(0, 5),
NumberStyles.AllowThousands).ToString("N", nfi);
//dataGridViewBankAccount.CurrentRow.Cells["Cash"].ValueType = typeof(string);
dataGridViewBankAccount.CurrentRow.Cells["Cash"].Value = ss;
}
/************************************************** ************************************************** **********************************/
private void dataGridViewBankAccount_EditingControlShowing(obje ct sender, DataGridViewEditingControlShowingEventArgs e)
{
TextBox text = e.Control as TextBox;
if (dataGridViewBankAccount.CurrentCell.ColumnIndex == 3)
{
if (text != null)
text.KeyUp += new KeyEventHandler(txtCash_KeyUp);
}
//رنگی کردن سلول در هنگام ویرایش
e.CellStyle.BackColor = Color.Pink;
}
چطوری می تونم کد بالا را تغییر بدم تا کاربر در حین وارد کردن اطلاعت در سلول دیتا گرید به صورت 3رقم 3رقم جدا بشه؟
اگه دوستان راه حل بهتری دارن لطفا در اختیار من و دوستان قرار بدن.

FastCode
سه شنبه 22 آذر 1390, 22:56 عصر
DataGridView.EditingControl
باید متن تکستباکس رو تغییر بدید.
با رویداد EditingControlShowing

faravaghi
سه شنبه 22 آذر 1390, 23:07 عصر
سلام عزیز،
خوب اینو از اول بگو.
بازم اگه درست متوجه شده باشم شما میخوای وقتی کاربر مثلا توی یک TexBox عدد وارد کرد بیاد و در لحظه 3 تا 3 تا از هم جدا کنه. ها همینه؟
با این تابع زیر میشه همین کار رو کرد به دوصورت نوشتم که اگه خواستی مثلا یک TexBox رو پر کنی و توش مبلغ رو بریزی عدد رو بدی بهت خروجی فرمت پول رو بده.
فقط یادت باشه اینو توی رویداد KeyUp مثلا TexBox فراخوانی کنی:


protected internal string MoneyFormat(long Money)
{
string ResultMoney = "";
long Mod = 0, Div = 0;

try
{
if (Money <= 0)
return "0";
else if (Money < 1000)
{
return Money.ToString();
}
else
{
do
{
Mod = Money % 1000;
Div = Money / 1000;

if (Mod.ToString().Length == 1)
ResultMoney = ",00" + Mod.ToString() + ResultMoney;
else if (Mod.ToString().Length == 2)
ResultMoney = ",0" + Mod.ToString() + ResultMoney;
else
ResultMoney = "," + Mod.ToString() + ResultMoney;

Money /= 1000;
} while (Div >= 1000 || Div < 0);
ResultMoney = Div.ToString() + ResultMoney;
if (ResultMoney[0] == ',')
{
ResultMoney = ResultMoney.Substring(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return ResultMoney;
}

protected internal string MoneyFormat(string StrMoney)
{

string ResultMoney = "";
long Money = 0, Mod = 0, Div = 0;

Money = Convert.ToInt64(Convert.ToDouble(StrMoney));

try
{
if (Money <= 0)
return "0";
else if (Money < 1000)
{
return Money.ToString();
}
else
{
do
{
Mod = Money % 1000;
Div = Money / 1000;

if (Mod.ToString().Length == 1)
ResultMoney = ",00" + Mod.ToString() + ResultMoney;
else if (Mod.ToString().Length == 2)
ResultMoney = ",0" + Mod.ToString() + ResultMoney;
else
ResultMoney = "," + Mod.ToString() + ResultMoney;

Money /= 1000;
} while (Div > 1000 || Div < 0);
ResultMoney = Div.ToString() + ResultMoney;
if (ResultMoney[0] == ',')
{
ResultMoney = ResultMoney.Substring(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return ResultMoney;
}


در ضمن اگه خواستی مقدار این TexBox رو بگیری و توی مثلا بانک ذخیره کنی این طوری باید انجامش بدی:


Convert.ToInt64(Convert.ToDouble(texbox1.Text.Trim ()))


انشاء الله درست متوجه شدم و کار شما راه بیافته!

araz_pashazadeh
چهارشنبه 23 آذر 1390, 20:21 عصر
[QUOTE=faravaghi;1395369]سلام عزیز،
خوب اینو از اول بگو.
بازم اگه درست متوجه شده باشم شما میخوای وقتی کاربر مثلا توی یک TexBox عدد وارد کرد بیاد و در لحظه 3 تا 3 تا از هم جدا کنه. ها همینه؟
با این تابع زیر میشه همین کار رو کرد به دوصورت نوشتم که اگه خواستی مثلا یک TexBox رو پر کنی و توش مبلغ رو بریزی عدد رو بدی بهت خروجی فرمت پول رو بده.
فقط یادت باشه اینو توی رویداد KeyUp مثلا TexBox فراخوانی کنی:
[RIGHT]
دقیقا منظور من همین هستش ولی نه در تکس باکس.
من می خوام وقتی کاربر سلول دیتا گرید را انتخاب کرد و در حالت ویرایش قیمت را وارد کرد به صورت 3رقم3رقم جدا بشه.
همون کاری که شما در داخل تکس باکس انجاو دادین.

faravaghi
پنج شنبه 24 آذر 1390, 01:45 صبح
سلام،
اینم از این مورد. فقط خودتون براساس نیازت یه جوری ردیفش کنید!


// Assign Control Object(declared as Global)
Control cntObject;

// Select DataGridView EditingControlShowing Event
Private void datagridview_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.TextChanged +=new EventHandler(textBox_TextChanged);
cntObject=e.Control;
cntObject.TextChanged +=textBox_TextChanged;
}


// TextBox TextChanged Event
Private void textBox_TextChanged(object sender, EventArgs e)
{
if(cntObject.Text!=string.Empty)
{
textBox.Text=cntObject.Text;
}
}


اینم اگه بگم بد نیست که من برای هر TexBox ی که دارم روی خاصیت KeyUp این تابع زیر رو می نویسم:


private void ChangeMoneyFormat(object sender, KeyEventArgs e)
{
try
{
ChangeTxtFormat(txtMoney);
}
catch { }
}
protected internal void ChangeTxtFormat(TextBox YourTextBox)
{
try
{
if (YourTextBox.Text.Length > 3)
{
double Payment = Convert.ToDouble(YourTextBox.Text);
YourTextBox.Text = MoneyFormat(Convert.ToInt64(Payment));
YourTextBox.SelectionStart = YourTextBox.Text.Length;
}
}
catch { }
}


شما هم اگه بتونید یه جوری به این کنترل حالی کنید که بعد از انجام محاسبه و ریختن دوباره عدد(رشته) توی گرید بیاد کنترل(مکان نما) رو ببره آخر رشته میشه مستقیم توی گرید همین کار رو انجام بدین، مثل این خط کد:

YourTextBox.SelectionStart = YourTextBox.Text.Length;

دیگه سوالی نیست؟

faravaghi
پنج شنبه 24 آذر 1390, 02:40 صبح
سلام دوست مهربون،
خودم یافتم. این برنامه رو ببین. دقیقا همونی که گفتم و می خواستید.
اینم برای اون دسته از دوستانی که حوصله دیدن برنامه رو ندارن:

DataGridViewTextBoxEditingControl editControl =
(DataGridViewTextBoxEditingControl)dataGridView1.E ditingControl;

//selects to the first two characters
editControl.SelectionStart = 0;
editControl.SelectionLength = 2;

//selects all the text
editControl.SelectionStart = 0;
editControl.SelectionLength = editControl.Text.Length;


که کامل برنامه میشه این :


Control cntObject;
// Select DataGridView EditingControlShowing Event
private void datagridview_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.TextChanged += new EventHandler(textBox_TextChanged);
cntObject = e.Control;
cntObject.TextChanged += textBox_TextChanged;
}

// TextBox TextChanged Event
private void textBox_TextChanged(object sender, EventArgs e)
{

if (cntObject.Text != string.Empty)
{
//textBox1.Text = MoneyFormat(cntObject.Text);
cntObject.Text = MoneyFormat(cntObject.Text);
DataGridViewTextBoxEditingControl editControl = (DataGridViewTextBoxEditingControl)dataGridView1.E ditingControl;
editControl.SelectionStart = editControl.Text.Length;
}
}

protected internal void ChangeTxtFormat(TextBox YourTextBox)
{
try
{
if (YourTextBox.Text.Length > 3)
{
double Payment = Convert.ToDouble(YourTextBox.Text);
YourTextBox.Text = MoneyFormat(Convert.ToInt64(Payment));
YourTextBox.SelectionStart = YourTextBox.Text.Length;
}
}
catch { }
}

protected internal string MoneyFormat(long Money)
{
string ResultMoney = "";
long Mod = 0, Div = 0;

try
{
if (Money <= 0)
return "0";
else if (Money < 1000)
{
return Money.ToString();
}
else
{
do
{
Mod = Money % 1000;
Div = Money / 1000;

if (Mod.ToString().Length == 1)
ResultMoney = ",00" + Mod.ToString() + ResultMoney;
else if (Mod.ToString().Length == 2)
ResultMoney = ",0" + Mod.ToString() + ResultMoney;
else
ResultMoney = "," + Mod.ToString() + ResultMoney;

Money /= 1000;
} while (Div >= 1000 || Div < 0);
ResultMoney = Div.ToString() + ResultMoney;
if (ResultMoney[0] == ',')
{
ResultMoney = ResultMoney.Substring(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return ResultMoney;
}

protected internal string MoneyFormat(string StrMoney)
{
string ResultMoney = "";
long Money = 0, Mod = 0, Div = 0;

Money = Convert.ToInt64(Convert.ToDouble(StrMoney));

try
{
if (Money <= 0)
return "0";
else if (Money < 1000)
{
return Money.ToString();
}
else
{
do
{
Mod = Money % 1000;
Div = Money / 1000;

if (Mod.ToString().Length == 1)
ResultMoney = ",00" + Mod.ToString() + ResultMoney;
else if (Mod.ToString().Length == 2)
ResultMoney = ",0" + Mod.ToString() + ResultMoney;
else
ResultMoney = "," + Mod.ToString() + ResultMoney;

Money /= 1000;
} while (Div > 1000 || Div < 0);
ResultMoney = Div.ToString() + ResultMoney;
if (ResultMoney[0] == ',')
{
ResultMoney = ResultMoney.Substring(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return ResultMoney;
}

araz_pashazadeh
پنج شنبه 24 آذر 1390, 12:46 عصر
دوست عزیز من با استفاده از راهنمایی شما تونستم این کار راانجام بدم ولی مشکل اینجاست که من فرمت ستون را در دیتا گرید از نوع پولی انتخاب کردم تا واحد پول یعنی ریال را در ستون همراه مبلغ نمایش بده و هنگام جدا کردن ریال را بر میدارم تا فقط خود عدد بمونه.
تا اینجای کار مشکلی نیست ولی وقتی عدد را وارد می کنم به جای اینکه مکان نما در انتهای مبلغ باشه(در سمت راست) میره به ابتدای مبلغ(سمت چپ) که در این کار درست نیست.
من هر کاری کردم حتی راست چین چپ چین را تغییر دادم ولی باز نشد.
این تکه کدی هستش که من نوشتم:
private void txtCash_KeyUp(object sender, KeyEventArgs e)
{
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalDigits = 0;
DataGridViewTextBoxEditingControl editControl = (DataGridViewTextBoxEditingControl)dataGridViewBan kAccount.EditingControl;
string ss = Decimal.Parse(dataGridViewBankAccount.CurrentRow.C ells["Cash"].EditedFormattedValue.ToString(),
NumberStyles.AllowThousands).ToString("N", nfi);
dataGridViewBankAccount.EditingControl.Text = ss;
}
/************************************************** ************************************************** **********************************/
private void dataGridViewBankAccount_EditingControlShowing(obje ct sender, DataGridViewEditingControlShowingEventArgs e)
{
TextBox text = e.Control as TextBox;
if (dataGridViewBankAccount.CurrentCell.ColumnIndex == 3)
{
if (text != null)
{
dataGridViewBankAccount.EditingControl.Text = dataGridViewBankAccount.CurrentRow.Cells["Cash"].EditedFormattedValue.ToString().Remove(0, 5);
text.KeyUp += new KeyEventHandler(txtCash_KeyUp);
}
}
//رنگی کردن سلول در هنگام ویرایش
e.CellStyle.BackColor = Color.Pink;
}
به نظر من در هنگام ویرایش چون فارسی می نویسم مشکل پیدا می کنه.
ممنون میشم اگه من را در این زمینه هم راهنمایی کنین.

faravaghi
پنج شنبه 24 آذر 1390, 16:10 عصر
سلام گرامی،
من تو پست 22 توضیح دادم که این یک مشکله باید حل بشه!!

سلام،
شما هم اگه بتونید یه جوری به این کنترل حالی کنید که بعد از انجام محاسبه و ریختن دوباره اون توی گرید بیاد کنترل رو ببره آخر رشته میشه مستقیم توی گرید همین کار رو انجام بدین، مثل این خط کد:





YourTextBox.SelectionStart = YourTextBox.Text.Length;






بعد اومدم توی پست بعدی یعنی 23 بازم گفتم که خودم تکمیل کردم و این کار رو انجام میده با کدی که اول پست گذاشتم:

سلام دوست مهربون،
خودم یافتم. این برنامه رو ببین. دقیقا همونی که گفتم و می خواستید.DataGridViewTextBoxEditingControl editControl =

(DataGridViewTextBoxEditingControl)dataGridView1.E ditingControl;

//selects to the first two characters
editControl.SelectionStart = 0;
editControl.SelectionLength = 2;

//selects all the text
editControl.SelectionStart = 0;
editControl.SelectionLength = editControl.Text.Length;




یعنی اینکه مشکل دیگه حله!


ولی وقتی عدد را وارد می کنم به جای اینکه مکان نما در انتهای مبلغ باشه(در سمت راست) میره به ابتدای مبلغ(سمت چپ) که در این کار درست نیست.
من هر کاری کردم حتی راست چین چپ چین را تغییر دادم ولی باز نشد.
این تکه کدی هستش که من نوشتم:
به نظر من در هنگام ویرایش چون فارسی می نویسم مشکل پیدا می کنه.
ممنون میشم اگه من را در این زمینه هم راهنمایی کنین.
به روی چشم دوباره براتون توضیح میدم:
وقتی کد زیر رو می نویسید:

DataGridViewTextBoxEditingControl editControl = (DataGridViewTextBoxEditingControl)dataGridViewBan kAccount.EditingControl;

باید کد زیر رو هم بنویسید تا کنترل بره آخر رشته تا وقتی دارین دوباره عدد وارد میکنید بره و به آخر رشته یا همون عدد اضافه بشه:

editControl.SelectionLength = editControl.Text.Length;

این کد رو هم باید به برنامه تون اضافه کنید مثل کدی که من دادم:

// TextBox TextChanged Event
private void textBox_TextChanged(object sender, EventArgs e)
{

if (cntObject.Text != string.Empty)
{
//textBox1.Text = MoneyFormat(cntObject.Text);
cntObject.Text = MoneyFormat(cntObject.Text);
DataGridViewTextBoxEditingControl editControl = (DataGridViewTextBoxEditingControl)dataGridView1.E ditingControl;
editControl.SelectionStart = editControl.Text.Length;
}
}

araz_pashazadeh
پنج شنبه 24 آذر 1390, 16:59 عصر
من منظور شما را کاملا خوب متوجه شدم و در برنامه خودم هم قرار دادم درست هم کار کرد مشکلی هم نداشت خیلی هم از شما ممنون هستم که من را راهنمایی می کنین(تنها مشکلش برای اعداد بسیار بزرگ بود چون رنج نوع long محدود).
دوست عزیز من به جای توابع که شما برای جدا کردن اعداد به صورت 3رقم 3رقم نوشتین از کد زیر استفاده می کنم که اینم درست کار می کنه:
NumberFormatInfo nfi = new NumberFormatInfo();

nfi.NumberDecimalDigits = 0;

DataGridViewTextBoxEditingControl editControl = (DataGridViewTextBoxEditingControl)dataGridViewBan kAccount.EditingControl;

string ss = Decimal.Parse(dataGridViewBankAccount.CurrentRow.C ells["Cash"].EditedFormattedValue.ToString(),

NumberStyles.AllowThousands).ToString("N", nfi);

dataGridViewBankAccount.EditingControl.Text = ss;
ولی به دلیل کم حجم بودن من از این روش استفاده می کنم.
اینم درست کار میکنه ولی وقتی دیتا گرید به مد ویرایش می ره و اطلاعات را وارد می کنم اطلاعات به جای این که هنگام وارد کردن در ابتدا وارد بشه در انتها وارد میشه مشکل همینه.
من کدهای شما را هم که گفته بودین قرار دادم ولی باز مشکل حل نشد.
نمی دانم چیکار کنم تا مکانما در ابتدا قرار بگیره؟

linux
پنج شنبه 24 آذر 1390, 17:43 عصر
سلام
چگونه مي توان عدد را بصورت سه رقم سه رقم در gridview نمايش داد؟
با تشکر
احتیاج به کد نوشتن ندارید اگر دیتایی که بایند هست به گرید از نوع عدد باشد

yourDataGridViewTextBoxColumn.DefaultCellStyle.For mat = "N0";

araz_pashazadeh
پنج شنبه 24 آذر 1390, 20:30 عصر
احتیاج به کد نوشتن ندارید اگر دیتایی که بایند هست به گرید از نوع عدد باشد

yourDataGridViewTextBoxColumn.DefaultCellStyle.For mat = "N0";

همون طوری که شما گفتین من از همین روش استفاده می کنم.
مشکل من این که می خوام کاربر وقتی در دیتا گرید مبلغ وارد می کنه به صورت 3رقم 3رقم جدا بشه.
برای این کار هم از کد بالا استفاده کردم و هم دوست عزیزم من را راهنمایی کردن (کد را هم در بالا قرار دادن).
ولی مشکل ایجاست وقتی اعداد جدا میشن مکانما با انتهای متن میره و من مجور میشم دستی مکانما را با ابتدا انقال بدم.
هر بار که عددی وارد میشه باید این کار را انجام بدم.
حتی از چپ چین راست چین هم استفاده کردم ولی باز نشد.

faravaghi
پنج شنبه 24 آذر 1390, 21:09 عصر
سلام،


ولی مشکل ایجاست وقتی اعداد جدا میشن مکانما با انتهای متن میره و من مجور میشم دستی مکانما را با ابتدا انقال بدم.
هر بار که عددی وارد میشه باید این کار را انجام بدم.
حتی از چپ چین راست چین هم استفاده کردم ولی باز نشد.

نمی دونم شما چرا می خواین این کار رو انجام بدین ولی با کد زیر میشه مکان نما رو ببرید اول رشته:
editControl.SelectionStart = 0;
اصلا فلسفه بردن مکان نما به آخر رشته همینه که اعداد به انتها اضافه بشه، یعنی این کد:
editControl.SelectionStart = editControl.Text.Length;
حالا اگه شما اصرار به این امر دارید کد بالایی رو استفاده کنید.

araz_pashazadeh
شنبه 26 آذر 1390, 10:25 صبح
دوست عزیز قبلا هم گفتم این کار را می کنم چون می خوام اطلاعات (مبلغ) به صورت 3رقم 3رقم جدا بشه هم در هنگام نمایش هم در زمان ورود اطلاعات در داخل دیتا گرید.
از کدهای شما هم استفاده کردم این کدها تاثیری در ورود اطلاعات نمی کنن.
همش در انتها اطلاعات وارد میشن.
در ضمن روش شما برای اعداد بزرگتر از Long جواب نمی ده.

amir11205
شنبه 26 آذر 1390, 12:55 عصر
سلام من این روشو پیشنهاد میدم
اول یه کلاس بساز و تو اون یه تابع برای تبدیل لحظه ای عدد به عدد سه رقم جدا جدا استفاده کن. مثل کلاس زیر:


class Common
{
public static string rialTxt(string Str)
{
try
{
Int64 N;
String S;
if (Str != "")
{
S = Str.Replace(",", "");
N = Convert.ToInt64(S);
Str = N.ToString("#,#");
}
}
catch (FormatException)
{
DialogResult result = MessageBox.Show("در هنگام ورود داده ها، کاراکتر نامعتبر وارد شده است.لطفا مجددا داده موردنظر را وارد نمایید", "ورود کاراکتر نامعتبر", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

return Str;
}
بعد از اون تو هنگام وارد کردن داده ها که میخوای سه تا سه تا جدا شه کار زیرو بکن.یعنی مثلا تو رویداد TextChanged کار زیرو انجام بده

private void bAmountTxt_TextChanged(object sender, EventArgs e)
{
bAmountTxt.Text = Common.rialTxt(bAmountTxt.Text);
bAmountTxt.Select(bAmountTxt.Text.Length, 0);
}
این شد تغییر لحظه ایه عدد.
حالا نوبت نمایش عدد به صورت جدا جدا وقتی که عدد تو دیتابیسه.اینجا اگه بلد باشی میتونی از UDF استفاده کنی که با یه سرچ میتونی در موردش اطلاعاتی بدست بیاری .به صورت زیر:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString GetAmount(SqlInt64 amount)
{
if (amount.IsNull)
{
return null;
}
if (amount.Value == 0)
{
return "0";
}
Int64 mablagh = (Int64)amount;
return mablagh.ToString("#,#");
}
};
حالا نوبت خوندن ستونیه که میخوای اعدادش جدا شه.اگه کار با UDF رو بلد باشی و کارای بالارو کرده باشی فقط با یه select و بعد از اون یه بایند کرده اون select ستونتو میتونی نشون بدی.من خودم این کارو انجام دادم.مثل روش زیر:

select dbo.GetAmount(biling.bilingamount) from biling
حواست باشه ها.تا ندونی UDF چیه نمیتونی این قسمت آخر رو انجام بدی.

navidmirfallah
چهارشنبه 03 خرداد 1391, 15:19 عصر
دوستان عزیز جهت جدا سازی اعداد به صورت سه رقم سه رقم بدون نیاز به کدنویسی

1.درون پایگاه دادتون نوع داده رو باید حتما از نوع int یا decimal تعریف کنید.
2.در visual studio روی gridview کلیک کرده و از منوی باز شده روی edit columns کلیک کنید
3.ستون مورد نظر مثل قیمت را انتخاب کنید.
4.گزینه html encoding را false کنید.
5.در Dataformatstring عبارت {0:N0} را بنویسید.

بعد که به همین سادگی که نتیجه رو دیدیدمنم دعا کنید.مرسی:لبخندساده:

iman_me
چهارشنبه 03 خرداد 1391, 15:32 عصر
دوست عزیز یه نگاه به تاریخ تاپیک بنداز !!!!!!!!!!!!!!

maktab
سه شنبه 06 تیر 1391, 22:09 عصر
دوستان عزیز جهت جدا سازی اعداد به صورت سه رقم سه رقم بدون نیاز به کدنویسی

1.درون پایگاه دادتون نوع داده رو باید حتما از نوع int یا decimal تعریف کنید.
2.در visual studio روی gridview کلیک کرده و از منوی باز شده روی edit columns کلیک کنید
3.ستون مورد نظر مثل قیمت را انتخاب کنید.
4.گزینه html encoding را false کنید.
5.در Dataformatstring عبارت {0:N0} را بنویسید.

بعد که به همین سادگی که نتیجه رو دیدیدمنم دعا کنید.مرسی:لبخندساده:

این گزینه html encoding کجاست؟؟
این روش برای اعداد فارسی هم جواب میده؟