PDA

View Full Version : سوال: خطا در افزودن مقدار طولانی به ستون datagridview



رامین مرادی
چهارشنبه 09 خرداد 1397, 12:57 عصر
سلام وقت بخیر دوستان. من یه مشکل عجیب دارم. اونم اینه که وقتی داده های دیتاگرید رو از دیتابیس پر میکنم مشکلی نیست. یکی از داده ها یه رشته عددی طولانی هست . حدود عدد 40 رقمی.
اما وقتی دستی به دیتا گرید سطر اضافه میکنم به اون عدد گیر میده و خطای زیر رو نشون میده
Value was either too large or too small for an Int32
نوع ذخیره شده در دیتابیس رشته ای هست. نوعی که اینجا به این ستون مقدار میدم هم رشته ای هست.

کد برای ایجاد یک سطر در دیتاگرید



radGridView1.Rows.Add(txtCodeRandom.Text.ToString( ), val, Ostan, Shahr, Mahal);



اگه اینو(txtCodeRandom) خالی بفرستم درست ثبت میشه.اما وقتی با عددی مثل (7941472184186356655688641736488411578) میفرستم خطا میده :عصبانی++:
ممنون میشم راهنمایی کنید. بدجور لنگ این شدم.

ژیار رحیمی
چهارشنبه 09 خرداد 1397, 17:39 عصر
اما وقتی با عددی مثل (7941472184186356655688641736488411578) واقعن عددی مثل این داریم؟
خطا از متد ToString است.حذفش کن

رامین مرادی
پنج شنبه 10 خرداد 1397, 08:39 صبح
اما وقتی با عددی مثل (7941472184186356655688641736488411578) واقعن عددی مثل این داریم؟
خطا از متد ToString است.حذفش کن

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


string coderandom = CreateUnique16DigitString() + CreateUnique16DigitString() + txtPId.SelectedValue.ToString();



درضمن اون متد ToString که میفرمایید خودم گذاشتم. بدون اونم این خطا رو میده.
مشکل اینجاس که وقتی میخوام خونه ای از دیتاگرید رو پر کنم پیش فرض int32 در نظر میگیره.
تایپش رو هم عوض کردم قبل انتساب برا اونم خطا گرفت

Mahmoud.Afrad
پنج شنبه 10 خرداد 1397, 09:18 صبح
ستونها رو دستی به دیتاگربد اضافه کردی یا نه؟

رامین مرادی
پنج شنبه 10 خرداد 1397, 09:30 صبح
ستونها رو دستی به دیتاگربد اضافه کردی یا نه؟
یه تعدادیش از دیتابیس خونده میشه یه تعدادیش رو هم دستی اضافه میکنم.(اول از دیتابیس خونده میشه ) بعد اگه کاربر خواست دستی هم اضافه میکنه. برا اینکه دوباره از دیتابیس نخونم فقط متد اینسرت رو به دیتابیس ارسال میکنم و در صورت صحت عملیات تو دیتاگرید خودم اضافه میکنم و نمیخوام یه بار دیگه سلکت بزنم. اگه خطا بده باید بازم از دیتابیس سلکت بزنم بجای ثبت دستی.:ناراحت:

Mahmoud.Afrad
پنج شنبه 10 خرداد 1397, 10:09 صبح
منظورم ستونی هست که خطا میده. دستی ایجاد کردید یا در کوئری سلکت میشه؟ نوعش در دیتابیس چیه؟

متن دقیق خطا رو هم بزار.

رامین مرادی
پنج شنبه 10 خرداد 1397, 11:21 صبح
منظورم ستونی هست که خطا میده. دستی ایجاد کردید یا در کوئری سلکت میشه؟ نوعش در دیتابیس چیه؟

متن دقیق خطا رو هم بزار.

ستون رو دستی ایجاد کردم. نوعش هم در دیتا بیس nvarchar(100) هست
متن خطا عینا :
Value was either too large or too small for an Int32