PDA

View Full Version : مبتدی: ثبت حضور و غیاب



مریم محمدی 888
شنبه 12 بهمن 1392, 20:43 عصر
سلام
من دارم یه برنامه حضور غیاب می نویسم بدین صورت که افراد یه جدول به نام ثبت رو به صورت دیتا گرید ویو
نشون بده که یکی از فیلد هایش به اسم حضور از جدولی دیگر است.


جدول ثبت من شامل : نام --- نام خانوادگی --- کد شناسایی --- حقوق است
من میخواهم شرطی بنویسم که اگر تیک خورده بود به حقوق فرد مثلا 30 هزار تومن اضافه کنه.
حالا نمیدونم شرطش رو دقیقا چی بنویسم.
-------------------------------------------------------------------------------------------
سوال دومم اینکه ( البته ببخشید طولانی شد )
من میخوام یه کنترل calendar بذارم که وقتی کاربر یه تاریخ خاصی رو خواست نشون بده که چه کسایی در همان روز حضور داشتند و جه کسانی حضور نداشتند.
من یک جدول دیگه درست کردم به نام حضور شامل فیلد های نام ---نام خانوادگی---تاریخ---ثبت حضور
حالا نمیدونم چطور بیاد نام و نام خانوادگی رو از جدول ثبت بگیره و نشون بده.
اصلا آیا باید برای هر روز یه جدول درست کنم ؟؟؟

forodo
شنبه 12 بهمن 1392, 21:18 عصر
سلام
شما می تونید داخل یک جدول وقتی که فرد وارد برنامه شد یا به قول شما دکمه ای رو زد تاریخ اون روز ثبت بشه و توی هموی سطر هم تیک حضورش بخوره و اگر خورد ببینه چند بار اون کاربر تیک خورده و سطرهای حقوق با هم جمع بشن و داخل حقوق سطر جدید ریخته بشه.

مریم محمدی 888
شنبه 12 بهمن 1392, 22:39 عصر
سلام
شما می تونید داخل یک جدول وقتی که فرد وارد برنامه شد یا به قول شما دکمه ای رو زد تاریخ اون روز ثبت بشه و توی هموی سطر هم تیک حضورش بخوره و اگر خورد ببینه چند بار اون کاربر تیک خورده و سطرهای حقوق با هم جمع بشن و داخل حقوق سطر جدید ریخته بشه.

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

forodo
شنبه 12 بهمن 1392, 22:47 عصر
لطفاً دقیق تر توضیح بدید که واقعاً می خواید چیکار کنید.

مریم محمدی 888
یک شنبه 13 بهمن 1392, 11:44 صبح
لطفاً دقیق تر توضیح بدید که واقعاً می خواید چیکار کنید.

من میگم یه جدول درست کنم مثل این

http://upload7.ir/imgs/2014-02/71892671031019439618.jpg

بعد بیام نام و نام خانوادگی و حضور را نمایش بدم .

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

http://upload7.ir/imgs/2014-02/61031502362900163900.jpg

فقط نمیدونم کدش رو تو #c چطور بنویسم :خجالت:

mousa1992
یک شنبه 13 بهمن 1392, 12:46 عصر
شما باید ی جدول داشته باشید که اطلاعات کارمندان رو نگهداری کنه و میتونه فیلدهای ( شماره پرسنلی، نام، نام خانوادگی، ... ) داشته باشه
ی جدول دیگه دارید برا ثبت حضور غیاب که فیلدهای (شماره پرسنلی و تاریخ ) باشه
این ساده ترین حالت هست و در هر تاریخی که فرد حاضر باشه یک رکورد برای اون در جدول حضور غیاب ثبت میشه و موقع محاسبه حقوق و دستمزد هم از جدول حضور غیاب تعداد روزهای حضورشون رو محاسبه میکنید

کدشو هم خودتون بنویسید منتظر کسی ننشینید ؛ اگر که میخواین برنامه نویس بشین

مریم محمدی 888
یک شنبه 13 بهمن 1392, 15:45 عصر
دوستان من کد زیر رو امتحان کردم ولی فکر کنم تو تبدیل پیغام خطا میده

SqlDataAdapter dat2 = new SqlDataAdapter("select * from table_2", con2);
DataTable dt = new DataTable();
dat2.Fill(dt);
if (dt.Rows.Count > 0)
{

for (i = 0; i <= 20; i++)
{

if (Convert.ToBoolean(dataGridView1.Rows[i].Cells[2].Value) == true)
{


int temp = Convert.ToInt32(dt.Rows[i][5].ToString()) + 1;
SqlCommand objcom = new SqlCommand("insert into table_2 (tedad) values(temp)", con2);
}
}
}
else
{
MessageBox.Show("هیچ داده ای موجود نیست");
}

من خواستم فیلد سوم گرید ویو را که در sql از نوع bit تعریف کردم اگر تیک خرده بود یک مقدار به فیلد دیگری در sql اضافه شود که پیغام خطای زیر رو داد
پیغام خطا تصویر زیر هست
http://upload7.ir/imgs/2014-02/29063031090354586203.jpg

مریم محمدی 888
یک شنبه 13 بهمن 1392, 20:21 عصر
دوستان کسی نیست راهنمایی کنه؟

مریم محمدی 888
یک شنبه 13 بهمن 1392, 22:12 عصر
اساتید محترم :گریه:

sohil_ww
یک شنبه 13 بهمن 1392, 22:25 عصر
ارور می گه که نمی تونه مقدار null رو به boolian تبدیل کنه که به احتمال زیاد مربوط به سطر آخر گریدته
در ضمن اینکه میای گرید و می زاری رویه یه حلقه for کار اشتباهی هست از forach استفاده کن
foreach (DataGridViewRow c in dgw1.Rows)
{
if (!Convert.ToBoolean(c.Cells[0].Value))
{
//
function()
//
}
}

مریم محمدی 888
یک شنبه 13 بهمن 1392, 23:08 عصر
ارور می گه که نمی تونه مقدار null رو به boolian تبدیل کنه که به احتمال زیاد مربوط به سطر آخر گریدته
در ضمن اینکه میای گرید و می زاری رویه یه حلقه for کار اشتباهی هست از forach استفاده کن
foreach (DataGridViewRow c in dgw1.Rows)
{
if (!Convert.ToBoolean(c.Cells[0].Value))
{
//
function()
//
}
}

سلام اول ممنونم که جواب دادی
من تو گرید ویو تنظیم کردم که دیگه سطر اضافه نزنه.
کد شما هم c.Cells[0].Value اشگال داره اصلا اجازه نمیده.
ولی بازم همون پیغام خطا رو میده.
فکر کنم نوع داده فیلد جدول با این نمیخونه. ( فیلد جدول از نوع bit هست)

rezgar_roshan
یک شنبه 13 بهمن 1392, 23:53 عصر
سلام میتونید به جای نوع بوولین از نوع عددی استفاده کنید و از اعداد 0 و 1 استفاده کنید.

مریم محمدی 888
دوشنبه 14 بهمن 1392, 19:32 عصر
دوستان هر کاری کردم نشد
اگه میتونید کمک کنید

مریم محمدی 888
چهارشنبه 16 بهمن 1392, 15:45 عصر
یعنی این سایت با این همه کار بلد نمیتونن یه راهنمایی بکن !!!

khokhan
چهارشنبه 16 بهمن 1392, 18:50 عصر
یعنی این سایت با این همه کار بلد نمیتونن یه راهنمایی بکن !!!
لازم نیست برای هر جلسه حضور مقداری رو وارد جدول کنین :لبخند:
با یه کوئری به صورت گروه بندی تعداد جلسات حضور رو برای هر فرد در یک بازه زمانی و بر اساس تاریخها بدست می آرین و توی یه لیست نشون می دین
حالا برای هر جلسه هر مقدار وجه که در نظر گرفتین رو وارد می کنین :

con = new SqlConnection(connect);
con.Open();
SqlCommand cmdDataBase = new SqlCommand("SELECT T1.f_name as [نام],T1.l_name as [نام خانوادگی], COUNT(T2.husoor) AS [تعداد جلسات حاضر]"+
" FROM salary T2 LEFT OUTER JOIN personal T1 on T2.person_id = T1.person_id WHERE T2.husoor = 'true' GROUP BY T1.f_name , T1.l_name ;", con);
try
{
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = cmdDataBase;
DataTable dt = new DataTable();
sda.Fill(dt);
con.Close();
dt.Columns.Add(new DataColumn("حقوق", typeof(int)));
dataGridView1.DataSource = dt;
116434

محاسبه وجه مربوط به تعداد جلسات حاضر

116435

مریم محمدی 888
پنج شنبه 17 بهمن 1392, 18:38 عصر
[QUOTE=khokhan;1970129]لازم نیست برای هر جلسه حضور مقداری رو وارد جدول کنین :لبخند:

سلام
اول تشکر میکنم که جواب دادید .

این کد یه قسمت هایی برام مبهم هست اگه میشه یه توضیح بدید چه کار میکنه.
مثلا

private void chkBoxChange(object sender, EventArgs e)
{
for (int k = 0; k <= dataGridView1.RowCount - 1; k++)
{
this.dataGridView1[2, k].Value = this.chkbox.Checked;
}
this.dataGridView1.EndEdit();
}


نمیدونم چه کار میکنه این کد ؟؟؟

و این خط کد chkbox.CheckedChanged += chkBoxChange;

و سوال دیگم اینکه با توجه به کدهای شما برنامه درست داره کار مینه ولی این پیغام خطا رو هم میده


http://upload7.ir/imgs/2014-02/38437694643189142323.jpg

تو این خط string id = radGridView1.Rows[i].Cells[0].Value.ToString();

khokhan
پنج شنبه 17 بهمن 1392, 19:11 عصر
این کد یه قسمت هایی برام مبهم هست اگه میشه یه توضیح بدید چه کار میکنه.
راجع به این کدها :


private void chkBoxChange(object sender, EventArgs e)
{
for (int k = 0; k <= dataGridView1.RowCount - 1; k++)
{
this.dataGridView1[2, k].Value = this.chkbox.Checked;
}
this.dataGridView1.EndEdit();
}



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



سوال دیگم اینکه با توجه به کدهای شما برنامه درست داره کار مینه ولی این پیغام خطا رو هم میده احتمالا محتویات بانک رو پاک کردین و برنامه رو با جدول خالی اجرا کردین برا همین این پیغام صادر شده
می تونین با قرار دادن یه try/cach خالی مانع اون پیام بشین

مریم محمدی 888
پنج شنبه 17 بهمن 1392, 20:43 عصر
متوجه شدم.

من میخوام با توجه به ثبت تاریخ هر روز یه کنترل Calendar1 بذارم که وقتی کاربر تارخ خاصی رو خواست تمام رکورد هایی با اون تاریخ خاص رو نشون بده.
حالا سوالم اینه که این Calendar1 نوع فارسی هم داره یا باید تبدیل تاریخ بشه دوباره.
یعنی در واقع میخوام مقدار Calendar1 رو بریزم تو یه متغییر و با یک کوئری اطلاعات رو نشون بدم.
میشه یک راهنمایی بکنید .

khokhan
پنج شنبه 17 بهمن 1392, 21:13 عصر
متوجه شدم.

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