PDA

View Full Version : دکمه ی add در برنامه ی دفتر تلفن



mammad_kami
چهارشنبه 28 شهریور 1386, 02:41 صبح
سلام
کد مربوط به رویداد click دکمه ی add در برنامه ی دفتر تلفنو می خواستم.
اگه یه مثال کامل باشه بهتره تا کدو بهتر بفهمم.
با تشکر از شما دوستان عزیز.

PC2st
چهارشنبه 28 شهریور 1386, 04:52 صبح
http://barnamenevis.org/forum/showthread.php?t=71830
http://barnamenevis.org/forum/showthread.php?t=57477
http://barnamenevis.org/forum/showthread.php?t=64690
http://barnamenevis.org/forum/showthread.php?t=75312
http://barnamenevis.org/forum/showthread.php?t=68245

mammad_kami
پنج شنبه 29 شهریور 1386, 16:06 عصر
بخاطر لینکایی که دادین ممنونم. ولی چیزی دستگیرم نشد. همشو چک کردم. یه برنامه کامل ورود داده حالا هرچی می خواد باشه دفتر تلفن/ کتابخانه یا هر چیزه دیگه فقط دیتا بیسش sql باشه.
کارم خیلی فوری فوتیه دو سه هفته ای میشه گیره این مشکل هستم. اگه حل شه خیلی عالی میشه.
بازم ممنون.

PC2st
پنج شنبه 29 شهریور 1386, 19:17 عصر
نمیدونم این منظورتون بود یا چیز دیگه ای... بهرحال این نمونه برنامه رو ببینید.

http://barnamenevis.org/forum/showpost.php?p=397830&postcount=34

gomnam
پنج شنبه 29 شهریور 1386, 23:25 عصر
نمونه برنامه ای که نحوه INSERT کردن در SQL Database بوسیله چند TextBox رو نشون میده که تمام TextBox ها (و DataGridView) به یک منبع داده مشترک متصل شده اند. همچنین نحوه استفاده از متد EndCurrentEdit و CancelCurrentEdit از شیئ BindingManagerBase رو توضیح میده. نمونه برنامه به شکل خیلی ساده ای طراحی شده.

در واقع وقتی که یک TextBox به منبعی وصل باشه، به محض خروج از Focus داده ها رو در dataTable میریزه، اما بنحوی ممکنه خودمون به کمک متد EndCurrentEdit داده ها رو در dataTable بریزیم.

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

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

واما در مورد برنامه ای که نوشتین
قبل از هر توضیحی جا داره که تشکر کنم از زحمتی که برای بقیه گذاشتین و وقتی که کشیدین

شاید این مطالبی را که میگم ایراد نباشه و فکر کنم چون برنامتون جنبه اموزشی داشته لحاظ نکردین

1) اگر چند بار پشت سر هم دکمه new record رابزنین (یعنی چند تا row ایجاد کنین ) وبعد text box ها را پر کنین و دکمه Add را بزنین برنامه crash میشه
2)موقعی که کاربر چیزی توی textbox وارد نمیکنه و دکمه ADD را میزنه پیامی مبنی بر اینکه دیتا صحیح نیست را میده (تا اینجا مشکلی نیست) و لی الزاما نیازی نیست که توی else در رویداد کلیک دکمه ADD متد
CancelAdding(); فراخوانی بشه به این دلیل که فرض کنین یه فرم دارین که توی اون 20 تا تکست باکس هست (خیلی معمولی) که کاربر 19 تای اون را پر کرده و اشتباها دکمه Add را میزنه ، خوب حالا بگین چه اتفاقی میافته ؟ بعد از دریافت یک پیام 19 تا textbox پر شده هم میپره (روز از نو روزی از نو)
3) استفاده زیاد از messageBox برای نمایش پیام ها خیلی مناسب نیست (البته استفاده از اون به تعداد زیاد) چون کاربر مجبور میشه که یه دکمه الکی دیگه (منظورم OK مربوط به mesageBox هست) را بزنه وتعداد زیاد این خیلی برای کاربر خوشایند نیست
البته مسلمه که برای پیام ها انتخابی که کاربر حق انتخاب داره مثل OkCancle یا Yesno و ... خوب طبیعیه که بهترین راه messageBox هست
4) flase کردن خاصیت enable مربوط به منتر لها مگر در مواقع ضروری توصیه نمیشه
اما در بعضی مواقع استفاده از اون خوب خیلی هم خوبه مثلا موقع پذیرش لایسنس برنامه و یا موقع استفاده از backGroundWorker (البته توی این موارد هم میشه جور دیکه ای عمل کرد)
ولی در اکثر مواقع بهتره که با کد برنامه را مدیریت کنید تا خیلی نیاز به false کردن enable نداشته باشیم چون ظاهر برنامه را یکمی به هم میریزه

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

mammad_kami
جمعه 30 شهریور 1386, 01:56 صبح
واقعا تشکر میکنم. ولی مثالی که گذاشتین به ظاهر رکوردو add میکنه برنامرو که میبندی هیچ رکوردی به database اضافه نشده. بازم تشکر میکنم.
اگه بیشتر بتونید راهنماییم کنید ممنون میشم و کمک بزرگی بم کردین.

PC2st
جمعه 30 شهریور 1386, 05:22 صبح
نکات مفیدی بود...

- برای موارد 1 و 2، در نظر نداشتم که چند رکورد رو بشه با هم اضافه کرد و گویا یادم رفته بود که مانع از این کار بشم،
باید بعد از کلیک روی "NEW Record" اون رو غیر فعال میکردم! :لبخند:

- برای موارد 3 و 4 هم در فکر User Friendly نبودم... نکات خوبی بود.

از نکاتی که اشاره کردید ممنونم... امیدوارم که نتایج مثبتی گرفته بشه.

PC2st
جمعه 30 شهریور 1386, 05:23 صبح
ولی مثالی که گذاشتین به ظاهر رکوردو add میکنه برنامرو که میبندی هیچ رکوردی به database اضافه نشده.
رکورد به دیتابیس اضافه میشه ولی بعد از هر بار اجرای برنامه، نسخه اصلی دیتابیس در محل خروجی برنامه کپی میشه، میتونید این حالت رو تغییر بدید باید خاصیت Copy to output directory رو برای دیتابیس روی Copy if newer تنظیم کنید تا تغییرات اعمال شده روی بانک، پا بر جا بمونه.



اگه بیشتر بتونید راهنماییم کنید ممنون میشم و کمک بزرگی بم کردین.
به نظر میرسه که منظورتون چیز دیگه ای بوده ، پس روش دیگری رو توضیح میدم، که در این روش textBox ها به منبع داده متصل نیستند، پس یک بانک اطلاعاتی با جدولی بنام Table1 و دو فیلد به نامهای ID و Name (از نوع (nchar(10) رو ایجاد کنید و مراحل زیر رو انجام بدید:
- افزودن دو TextBox به نامهای idTextBox و nameTextBox به فرم
- افزودن یک دکمه بنام addButton به فرم
- افزودن یک دکمه بنام updateButton به فرم
- افزودن یک دیتاگریدویو به نام dataGridView1 به فرم
- کدهای مربوط به فرمتون باید چیزی شبیه به زیر باشه (کدهای مربوطه رو بنویسید):


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
private SqlConnection cn;
private SqlDataAdapter da;
private DataTable dt;
public Form1()
{
InitializeComponent();
cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Database1.mdf;Integrated Security=True;User Instance=True");
da = new SqlDataAdapter("SELECT ID, Name FROM Table1", cn);
dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
da.InsertCommand = new SqlCommand("INSERT INTO Table1 (ID, Name) VALUES (@id, @name)", cn);
da.InsertCommand.Parameters.Add("@id", SqlDbType.NChar, 10, "ID");
da.InsertCommand.Parameters.Add("@name", SqlDbType.NChar, 10, "Name");
}
}
}

- در رویداد Click از دکمه addButton، کدهای زیر رو بنویسید:


private void addButton_Click(object sender, EventArgs e)
{
dt.Rows.Add(idTextBox.Text, nameTextBox.Text);
}

- در رویداد Click از updateButton کدهای زیر رو بنویسید:


private void updateButton_Click(object sender, EventArgs e)
{
da.Update(dt);
}

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

mammad_kami
جمعه 30 شهریور 1386, 13:48 عصر
عینا کدها رو نوشتم 3 تا error زیرو داد:
1: The type or namespace name 'Form1' could not be found (are you missing a using directive or an assembly reference
2: The best overloaded method match for 'System.Windows.Forms.Application.Run(System.Windo ws.Forms.Form)' has some invalid arguments
3: Argument '1': cannot convert from 'Form1' to 'System.Windows.Forms.Form'
با تشکر.

gomnam
جمعه 30 شهریور 1386, 14:43 عصر
نکات مفیدی بود...

،
باید بعد از کلیک روی "NEW Record" اون رو غیر فعال میکردم! :لبخند:

-

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

PC2st
جمعه 30 شهریور 1386, 15:31 عصر
عینا کدها رو نوشتم 3 تا error زیرو داد:
دلیل هر سه خطا یک مورد است و آن اینکه نام فرم رو تغییر ندهید و بگذارید نام فرم همان Form1 باشه... فکر کنم اینطور درست بشه.



باز هم با این روش مخالفم پست قبلی توضیح دادم شماره 4 را بخونین
جور دیگه ای باید سعی کنید که مدیریت کنید
در برنامه ای که نوشتم:

- برای موارد 3 و 4 هم در فکر User Friendly نبودم... نکات خوبی بود.
و در واقع همانطور که قبلا گفتید، این یک برنامه برای Testing است و غیر فعال کردن دکمه NEW Record صرفا یک راه حل بیش نیست.

از توجهتون ممنونم. :)

mammad_kami
جمعه 30 شهریور 1386, 16:08 عصر
اسم فرممو عوض نکردم همون Form 1 است.
با تشکر.

PC2st
جمعه 30 شهریور 1386, 19:22 عصر
نمونه برنامه رو آپلود کردم، این لینک موقتی است.

http://muhammadsadegh.parsaspace.com/samples/temporary/WindowsApplication2.zip

بعد از اضافه کردن رکوردها، روی Update کلیک کنید.

mammad_kami
یک شنبه 01 مهر 1386, 02:50 صبح
نشد که نشد. اصلا هیچ رکوردی به دیتا بیس اضافه نمیشه.
امیدوارم مشکلم حل شدنی باشه!!!

PC2st
یک شنبه 01 مهر 1386, 17:19 عصر
نشد که نشد. اصلا هیچ رکوردی به دیتا بیس اضافه نمیشه.
من خودم تست کردم، رکورد ها اضافه میشوند. شاید شما دیتابیس داخل پروژه رو نگاه میکنید؟ (این دیتابیس از طریق برنامه تغییر نمیکنه)
اگر منظورتون این هست که بعد از بستن برنامه و دوباره اجرا کردن، تغییرات به حالت اول باز میگرده (یعنی اینگار که رکوردی اضافه نشده) ممکنه بخاطر خاصیت Copy to output directory باشه، این خاصیت رو برای دیتابیس روی Copy if newer تنظیم کردید؟ (در مورد Copy to output directory جستجو کنید، قبلا در موردش مطالبی نوشته شده)

mammad_kami
دوشنبه 02 مهر 1386, 01:13 صبح
اگر منظورتون این هست که بعد از بستن برنامه و دوباره اجرا کردن، تغییرات به حالت اول باز میگرده (یعنی اینگار که رکوردی اضافه نشده) ممکنه بخاطر خاصیت Copy to output directory باشه، این خاصیت رو برای دیتابیس روی Copy if newer تنظیم کردید؟ (در مورد Copy to output directory جستجو کنید، قبلا در موردش مطالبی نوشته شده)

بله، منظورم همینه. خاصیت Copy to output directory مربوط به چه کنترلیه. اگه میشه بیشتر توضیح بدین.
جستجو هم کردم چیزی دستگیرم نشد.
بازم تشکر.

PC2st
دوشنبه 02 مهر 1386, 04:52 صبح
در محیط Visual Studio، از پنجره Solution Explorer نام بانک اطلاعاتی (Database) رو انتخاب کنید و به لیست خاصیت هایی که در پنجره Properties ظاهر میشه، دقت کنید... سپس خاصیت Copy to output directory را روی Copy if newer تنظیم کنید.

mammad_kami
دوشنبه 02 مهر 1386, 22:37 عصر
در محیط Visual Studio، از پنجره Solution Explorer نام بانک اطلاعاتی (Database) رو انتخاب کنید و به لیست خاصیت هایی که در پنجره Properties ظاهر میشه، دقت کنید... سپس خاصیت Copy to output directory را روی Copy if newer تنظیم کنید.

اصلا همچه چیزی نداره. فقط connection string, provider و state داره.
با تشکر.

PC2st
سه شنبه 03 مهر 1386, 00:18 صبح
بر اساس توضیحاتی که داده بودم یک عکس رو ضمیمه کردم، به دو ضربدر قرمز رنگ توجه کنید.

mammad_kami
سه شنبه 03 مهر 1386, 13:04 عصر
دقیقا همینا رو که بش اشاره کردینو نداره!!!

PC2st
سه شنبه 03 مهر 1386, 13:15 عصر
دقیقا همینا رو که بش اشاره کردینو نداره!!!
در مثالی که ضمیمه کردم این رو نداره یا در برنامه که خودتون؟

mammad_kami
سه شنبه 03 مهر 1386, 13:36 عصر
تو برنامه ی خودم بابا!!!!!!

PC2st
سه شنبه 03 مهر 1386, 14:08 عصر
در برنامه خودتون اگر بانک رو به پروژه اضافه نکرده باشید، خاصیت Copy to output directory هم معنا پیدا نمیکنه.
آیا بانک رو به پروژه اضافه کردید (که به نظر میرسه اون رو اضافه نکردید)؟
اگر بانک رو به پروژه اضافه نکردید و بانک اصلی در محل فایل exe وجود داشته باشه، قاعدتا باید اطلاعات در دیتابیس ذخیره بشه.
کار دیگه ای هست که صورت گرفته باشه؟

mammad_kami
سه شنبه 03 مهر 1386, 15:10 عصر
با تشکر،
چه جوری دیتا بیسمو به پروژه اضافه کنم؟

PC2st
سه شنبه 03 مهر 1386, 15:20 عصر
حتما لازم نیست دیتابیس به پروژه اضافه بشه (اما بهتره که اضافه بشه)...
برای افزودن دیتابیس به پروژه، از My Computer فایل Database رو انتخاب کنین و با Drag and Drop اون رو به داخل پنجره Solution Explorer بکشید و رها کنید.

mammad_kami
سه شنبه 03 مهر 1386, 22:43 عصر
آقا به من یاد بدین چه جوری باید دکمه ی add برنامه دفتر تلفن یا هر برنامه ای که دکمه ی add داشته باشرو بنویسم. بصورت کامل و واضح. جوری که کار کنه و تو دیتا بیس اضافه شه.
والسلام.

mammad_kami
چهارشنبه 04 مهر 1386, 03:23 صبح
کسی بلد نیست بتونه جوابمو بده؟!!!!!!

Amir Oveisi
پنج شنبه 05 مهر 1386, 14:50 عصر
تا اونجایی که من دیدم توضیحات دوستان باید کفایت بکنه!
شما در واقع مشکلتون تو Add کردن یه Record به یه Database هست. پس بهتره تو همین سایت یه Search ی بزنین در این مورد. 100% به جواب میرسین.
موفق باشید.