PDA

View Full Version : سوال: افزودن به یک عدد و نمایش در TextBox با هر بار ایجاد و نمایش فرم.



kamiloted
چهارشنبه 05 اسفند 1394, 13:35 عصر
با سلام خدمت همه ی دوستان.

بنده روی فرمم یک تکست باکس دارم که میخوام با هر بار لود شدن یا رفرش شدن فرم ، تکست باکس یک عدد جدید بگیرد یا مثلا الان عدد 5 توی تکست باکس نوشته شده سری بعد که فرم رفرش شد با 1 جمع شود و 6 نمایش دهد به همین ترتیب ...
ممنون میشم راهنمایی کنید.

یه حلقه نوشتم توی رویداید لود به این صورت:

For (int I =0; i<20000000;<i++)
{
Textbox.text=i+1;
}
اما نمیدونم چکار کنم که هر بار که لود شد تغییر کنه

csharpcollegian
چهارشنبه 05 اسفند 1394, 15:36 عصر
سلام،
روی فرم دابل کلیک کنید تا رویداد لود فرم باز بشه و از این کد داخل اون استفاده کنید :

private void Form1_Load(object sender, EventArgs e)
{
Random r = new Random();
textBox1.Text = r.Next(1, 100).ToString();
}

kamiloted
چهارشنبه 05 اسفند 1394, 17:19 عصر
ممنونم دوست عزیز عالی بود.
سوال دیگه اینکه اگر بخوام به ترتیب پشت سر هم بره باید چکار کنم؟

csharpcollegian
چهارشنبه 05 اسفند 1394, 17:37 عصر
بایستی یه کانتر در فیلدهای فرم تعریف کنید...به این کد دقت کنید :

namespace Barnamenevis
{
public partial class Form1 : Form
{

static int counter = 1;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = counter.ToString();
counter++;
}

}
}
البته این عدد تا زمانی که برنامه بازه توو حافظه میمونه، اگر میخواهید بعد از بسته شدن کلی برنامه هم حفظ بشه باید در یک فایل ذخیرش کنید

kamiloted
چهارشنبه 05 اسفند 1394, 17:53 عصر
البته این عدد تا زمانی که برنامه بازه توو حافظه میمونه، اگر میخواهید بعد از بسته شدن کلی برنامه هم حفظ بشه باید در یک فایل ذخیرش کنید

ممنونم.
منظورتون از فایل چیه؟

khokhan
چهارشنبه 05 اسفند 1394, 18:00 عصر
ممنونم دوست عزیز عالی بود.
سوال دیگه اینکه اگر بخوام به ترتیب پشت سر هم بره باید چکار کنم؟

می تونی عدد تولید شده رو بلافاصله درون یه متغیر از نوع عدد در setting ذخیره کنی دفعه بعد اون عدد ذخیره شده قبلی رو بگیری و یه دونه بگذاری روش و نمایش بدی و این پروسه در دفعات بعد ادامه پیدا کنه :لبخند:

kamiloted
چهارشنبه 05 اسفند 1394, 18:05 عصر
ممنون آقا یونس.
اما من میخوام این عدد تولید شده رو توی بانک به عنوان سریال فرمم ذخیره کنم.الان کد دوستمون خوبه ما ذخیره نمیشه.
منظورتون رو متوجه نشدم. یه نمونه برام میزارید.

kamiloted
چهارشنبه 05 اسفند 1394, 18:24 عصر
بانک من الان سریال غیر تکراری ایجاد میکنه بعد در دیتا گرید ویو هم نمایش میده.
یعنی من یک کاربر رو تعریف میکنم.مثلا اطلاعاتشو وارد میکنم و با زدن باتون ثبت اطلاعات اون کاربر در بانک ذخیره میشه و سریعا توسط بانک سریالش تولید میشه و در دیتا گرید ویو نمایش میده.
حالا من چکار کنم که بعد از ثبت شدن اون اطلاعات سریال به تکست باکس موردنظر برود ونمایش بدهد. تا من نخوام دیگه یه کار کنم که بعد از لود فرم تکست باکس عدد جدید نمایش بده.
ممنونم که وقت میزارید

khokhan
چهارشنبه 05 اسفند 1394, 18:34 عصر
بانک من الان سریال غیر تکراری ایجاد میکنه بعد در دیتا گرید ویو هم نمایش میده.
یعنی من یک کاربر رو تعریف میکنم.مثلا اطلاعاتشو وارد میکنم و با زدن باتون ثبت اطلاعات اون کاربر در بانک ذخیره میشه و سریعا توسط بانک سریالش تولید میشه و در دیتا گرید ویو نمایش میده.
حالا من چکار کنم که بعد از ثبت شدن اون اطلاعات سریال به تکست باکس موردنظر برود ونمایش بدهد. تا من نخوام دیگه یه کار کنم که بعد از لود فرم تکست باکس عدد جدید نمایش بده.
ممنونم که وقت میزارید
سریال تولید شده در بانک خوبه ولی ایرادی که داره اینه که اگه از ردیفهای میانی حذف بشه دیگه شماره سریال به هم می خوره

kamiloted
چهارشنبه 05 اسفند 1394, 18:39 عصر
این مهم نیست. چون قابلیت حذف نداره. ممنون میشم اگر کدشو برام بزاری

khokhan
چهارشنبه 05 اسفند 1394, 18:47 عصر
این مهم نیست. چون قابلیت حذف نداره. ممنون میشم اگر کدشو برام بزاری
در انتهای دستورات مربوط به ثبت اطلاعات می تونی آخرین آی دی ثبت شده رو از طریق دستورExecuteScalar مربوط بهSqlCommand دریافت کنی و در کنترل مربوطه نشان بدی

ویا از طریقدستور SELECT SCOPE_IDENTITY بلافاصله بعد از دستورات ثبت اطلاعات



string query = "Insert Into Categories (CategoryName) Values (?)";

string query2 = "Select @@Identity";

int ID;

string connect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Northwind.mdb";

using (OleDbConnection conn = new OleDbConnection(connect))

{

using (OleDbCommand cmd = new OleDbCommand(query, conn))

{

cmd.Parameters.AddWithValue("", Category.Text);

conn.Open();

cmd.ExecuteNonQuery();

cmd.CommandText = query2;

ID = (int)cmd.ExecuteScalar();

}

}

kamiloted
چهارشنبه 05 اسفند 1394, 19:09 عصر
منظورتون از Categories چیه؟
به جای این Category.Text باید چی بزارم اسم تکست باکسم.

متوجه اینم نشدم.
ممنونم

kamiloted
چهارشنبه 05 اسفند 1394, 19:09 عصر
string query2 = "Select @@Identity";

kamiloted
چهارشنبه 05 اسفند 1394, 19:10 عصر
به جای این چی باید بزارم
Select @@Identity

mohsene_e
پنج شنبه 06 اسفند 1394, 05:00 صبح
سلام، نمیدونم مشکلت حل شده یا نه، اگر نه میشه کدت رو یا دستور insert رو ببینیم؟

kamiloted
پنج شنبه 06 اسفند 1394, 07:39 صبح
سلام دوست عزیز مشکلم حل نشد.
من با استورید پروسیجر دستور اینزرت رو نوشتم.
ممنون میشم اگه کمکم کنید.

khokhan
پنج شنبه 06 اسفند 1394, 11:07 صبح
سلام دوست عزیز مشکلم حل نشد.
من با استورید پروسیجر دستور اینزرت رو نوشتم.
ممنون میشم اگه کمکم کنید.

کد پروسچر تون چه شکلیه؟

khokhan
پنج شنبه 06 اسفند 1394, 11:50 صبح
سلام دوست عزیز مشکلم حل نشد.
من با استورید پروسیجر دستور اینزرت رو نوشتم.
ممنون میشم اگه کمکم کنید.

یه پارامتر خروجی به پروسچر اضافه می کنی
و با استفاده از SCOPE_IDENTITY آخرین آی دی ثبت شده رو دریافت کرده و به اون پارامتر خروجی انتصاب می دی :



ALTER PROCEDURE [dbo].[NewUser]
@f_name varchar(50),
@l_name varchar(50),

@id int output
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO users (f_name, l_name)
VALUES (@f_name, @l_name)
SET @id=SCOPE_IDENTITY()
RETURN @id
END


بعد سمت برنامه هم موقع ثبت رکورد جدید اون پارامتر خروجی رو دریافت کرده و نمایش می دی


String strConnString = @"Data Source=ALMA-PC\SQLEXPRESS;Initial Catalog=kaka;Integrated Security=True;Pooling=False";
SqlConnection con = new SqlConnection(strConnString);
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "NewUser";
cmd.Parameters.Add("@f_name", SqlDbType.VarChar).Value = txtFirstName.Text.Trim();
cmd.Parameters.Add("@l_name", SqlDbType.VarChar).Value = txtLastName.Text.Trim();
cmd.Parameters.Add("@id", SqlDbType.Int).Direction = ParameterDirection.Output;
cmd.Connection = con;
try
{
con.Open();
cmd.ExecuteNonQuery();
string id = cmd.Parameters["@id"].Value.ToString();
MessageBox.Show("ثبت با موفقیت انجام شد "+"\n" +" آیدی ثبت شده"+" : "+ id);
}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
con.Dispose();
}

kamiloted
پنج شنبه 06 اسفند 1394, 11:58 صبح
باسلام

دستور insert


سمت Sql

create proc [dbo].[AddSerial]
@GrossWeight nvarchar (50),
@Date nvarchar(50)

as


Insert into TblSerial (GrossWeight,Date)
values (@GrossWeight,@Date

go)


سمت سی شارپ




SqlCommand cmd = new SqlCommand("AddSerial", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@GrossWeight", txt1.Text);
cmd.Parameters.AddWithValue("@Date", lblDate.Text);

con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("اطلاعات با موفقیت ثبت شد");
ds.Clear();
}

kamiloted
پنج شنبه 06 اسفند 1394, 12:02 عصر
ممنونم آقا یونس

و با استفاده از SCOPE_IDENTITY آخرین آی دی ثبت شده رو دریافت کرده و به اون پارامتر خروجی انتصاب می دی :

چگونه این کار و انجام بدم؟

khokhan
پنج شنبه 06 اسفند 1394, 12:12 عصر
ممنونم آقا یونس

و با استفاده از SCOPE_IDENTITY آخرین آی دی ثبت شده رو دریافت کرده و به اون پارامتر خروجی انتصاب می دی :

چگونه این کار و انجام بدم؟
اگه به کدهای پروسچری که من براتون گذاشتم دقت بکنین یه خط هست به این شکل :

SET @id=SCOPE_IDENTITY()
کار اون خط گرفتن آخرین آی دی ثبت شده بعد از هر بار ثبت رکورد جدید هست :لبخند:

khokhan
پنج شنبه 06 اسفند 1394, 12:16 عصر
چگونه این کار و انجام بدم؟

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

ALTER proc [dbo].[AddSerial]
@GrossWeight nvarchar (50),
@Date nvarchar(50)
@id int output
as


Insert into TblSerial (GrossWeight,Date)
values (@GrossWeight,@Date
SET @id=SCOPE_IDENTITY()
RETURN @id
go)




و کدهای مربوط به ثبت جدید در سمت برنامه هم به این شکل بایستی باشه :

SqlCommand cmd = new SqlCommand("AddSerial", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@GrossWeight", txt1.Text);
cmd.Parameters.AddWithValue("@Date", lblDate.Text);

con.Open();
cmd.ExecuteNonQuery();
string id = cmd.Parameters["@id"].Value.ToString();
MessageBox.Show("ثبت با موفقیت انجام شد "+"\n" +" آیدی ثبت شده"+" : "+ id);
con.Close();

ds.Clear();

hadi vafaii
پنج شنبه 06 اسفند 1394, 12:37 عصر
با سلام خدمت همه ی دوستان.

بنده روی فرمم یک تکست باکس دارم که میخوام با هر بار لود شدن یا رفرش شدن فرم ، تکست باکس یک عدد جدید بگیرد یا مثلا الان عدد 5 توی تکست باکس نوشته شده سری بعد که فرم رفرش شد با 1 جمع شود و 6 نمایش دهد به همین ترتیب ...
ممنون میشم راهنمایی کنید.

یه حلقه نوشتم توی رویداید لود به این صورت:

For (int I =0; i<20000000;<i++)
{
Textbox.text=i+1;
}
اما نمیدونم چکار کنم که هر بار که لود شد تغییر کنه

سلام عرض میکنم خدمت اساتید
دوست عزیز اگه سریالت فقط عدد باشه این کد شاید بدردت خورد. این کد بزرگترین عدد موجود تو دیتابیس رو بدست میاره و یه واحد بهش اضافه میکنه البته دیتابیس مد نظر اینجا اکسس هستش که میتونین با تغییر جزیی تو اس کیو ال هم استفاده کنین.اگر دیتابیستون خالی باشه یعنی کاربر اولین بار فرم را لود کرده و خطا گرفت میتونین یه try بذارین که نتونست این کد رو اجرا کنه خودش مثلا یک عدد که تو متغییر قرار دادین رو به عنوان سریال استفاده کنه و از او به بعد چون دیتابیس خالی نیست دیگه خطا نمیده

موفق باشید

#region
public static int mosbat()
{
int FilNumber, AddNumber, NewNumber;
AddNumber = 1;
OleDbConnection con = setconection();
OleDbCommand com = new OleDbCommand("select max(ID) from tblsabtenam", con);
con.Open();
FilNumber = Convert.ToInt32(com.ExecuteScalar());
NewNumber = FilNumber + AddNumber;
con.Close();
return NewNumber;

}
#endregion

kamiloted
پنج شنبه 06 اسفند 1394, 12:38 عصر
جناب آقای خوخان الان من یک بانک دارم که یک سریال نمبر دارد و یک نام و یک تاریخ


که من در بانک آیدنتیتی اون رو یس کردم.

و استور پروسیجر بالا را براش نوشتم.

و روی فرمم 2 تا تکست باکس و یک باتون و یک دیتا گرید ویو گذاشتم.
تکست باکس 1 نام را میگیرد و تکست باکس 2 تاریخ و بر روی دکمه ثبت کلیک میشود و در بانک ثبت میشود.بلافاصله در دیتا گرید ویو
سریال نامبر و نام و تاریخ را نمایش میدهد.

برای مثال کاربر محمد 1394 را ثبت میکند و در دیتا گرید ویو به این صورت نمایش میدهد.

سریال نام تاریخ
5 محمد 1394

من میخوام بلا فاصله بعد از ثبت اون سریال در تکست باکس سوم که روی فرم است نمایش داده شود.

در کل من میخوام فیش صادر کنم و میخوام بلافاصله این تکست باکس ها که پر شدند و ثبت شدند هر سه مورد به گزارش فست ریپورت بروند و آماده شوند برای چاپ.

من این کارو طوری نوشتم که اطلاعات ابتدا در بانک ثبت میشوند بعد محتوای اون تکست باکس ها به گزارش میروند.چون سریال را خود بانک تعیین میکند کار من رو مشکل کرده است.
باید چکار کنم.
ممنونمممممممممم

kamiloted
پنج شنبه 06 اسفند 1394, 12:44 عصر
جناب آقای خوخان اون کد شما فقط آخرین آیدی ثبت شده رو به من نمایش میدهد که من همون رو نیاز دارم اما نمیدونم چطور بگیرمش

khokhan
پنج شنبه 06 اسفند 1394, 12:47 عصر
در کل من میخوام فیش صادر کنم و میخوام بلافاصله این تکست باکس ها که پر شدند و ثبت شدند هر سه مورد به گزارش فست ریپورت بروند و آماده شوند برای چاپ.

من این کارو طوری نوشتم که اطلاعات ابتدا در بانک ثبت میشوند بعد محتوای اون تکست باکس ها به گزارش میروند.چون سریال را خود بانک تعیین میکند کار من رو مشکل کرده است.
باید چکار کنم.
ممنونمممممممممم
اگه منظور شما اینه که هم زمان بعد از ثبت یه رکورد بالافاصله عمل چاپ هم انجام بشه که خوب این همه زلم زیمبو نمی خواد که......................
یه متد بگذار و محتوای کنترلها رو بگیره و از طریق پارامتر به گزارش بفرسته
بعد نام متد رو در آخر کدهای ثبت جدید قرار بده
اینطوری هروقت رکورد جدید ثبت بشه همون فیلدها عینا و مستقیما می ره به گزارش

kamiloted
پنج شنبه 06 اسفند 1394, 12:58 عصر
اگه منظور شما اینه که هم زمان بعد از ثبت یه رکورد بالافاصله عمل چاپ هم انجام بشه که خوب این همه زلم زیمبو نمی خواد که......................
یه متد بگذار و محتوای کنترلها رو بگیره و از طریق پارامتر به گزارش بفرسته
بعد نام متد رو در آخر کدهای ثبت جدید قرار بده
اینطوری هروقت رکورد جدید ثبت بشه همون فیلدها عینا و مستقیما می ره به گزارش

دقیقا من مشکلم همینه که چه طور باید بنویسمش.ممنون میشم کمک کنید.با فست ریپورت

kamiloted
پنج شنبه 06 اسفند 1394, 13:03 عصر
دقیقا من مشکلم همینه که چه طور باید بنویسمش.ممنون میشم کمک کنید.با فست ریپورت

من به این صورت نوشتم

FastReport.Report rp = new FastReport.Report();
rp.Load(@"Sodor_Ghabz.frx");
rp.SetParameterValue("GhabzID", txt0.Text);
rp.SetParameterValue("GrossWeight", txt1.Text);
rp.SetParameterValue("Date", lblDate.Text);
rp.Show();

kamiloted
پنج شنبه 06 اسفند 1394, 13:05 عصر
FastReport.Report rp = new FastReport.Report();
rp.Load(@"Sodor_Ghabz.frx");
rp.SetParameterValue("GhabzID", txt0.Text);

rp.SetParameterValue("Date", lblDate.Text);
rp.Show();

kamiloted
پنج شنبه 06 اسفند 1394, 13:06 عصر
که در قسمت فست ریپورت به بانک متصل نکردم خودم دستی براش نوشتم

khokhan
پنج شنبه 06 اسفند 1394, 14:08 عصر
جناب آقای خوخان کمک نمیکنید
شاید بتونم با این نمونه منظورم رو برسون

kamiloted
پنج شنبه 06 اسفند 1394, 16:08 عصر
جناب آقای خوخان بسیار ممنونم بازم کارتون مثل همیشه عالی بود.

یه مشکل دیگه که نمیدونم دقیقا چیه.
وقتی اولین اطلاعات و ثبت میکنم به درستی ثبت میشه و به گزارش فرستاده میشه. اما وقتی میخوام یکی دیگه ثبت کنم اطلاعات رو وارد میکنم و به محض زدن باتون ثبت با این خطا روبرو میشم مشکل چه؟ ممنون

139292

kamiloted
پنج شنبه 06 اسفند 1394, 17:57 عصر
مشکل حل شد.


ممنونم از همه ی دوستانی که کمک کردند به ویژه جناب آقای خوخان.