كليك روي ركوردي از datagrid

sara_she

Member
سلام

من تو c++.net‌يه پروژه دارم (2003) و يك سري داده رو از بانك تو datagridميريزم مي خوام وقتي روي يكي از ركوردهاي datagrid كليك مي شه يا روي داده موجود در يك فيلد اون يه كاري انجام بشه چطود مي تونم اين كار رو بكنم يا براي داده هاي نمايش داده شده در جدول روال كليك داشته باشم

اگه كسي پيشنهاد بهتري به ذهنش مي رسه يا راه حل رو مي دونه خواهش مي كنم كمك كنه تا مشكل من حل بشه
ممنون و موفق باشيد
 

night11

Member
این لینک ها رو ببینید شاید کمک بکنه

کد:
http://msdn2.microsoft.com/en-us/library/system.windows.forms.datagridview_events.aspx
http://msdn2.microsoft.com/en-us/library/system.windows.forms.datagridview.cellclick.aspx
http://msdn2.microsoft.com/en-us/library/system.windows.forms.datagridview.cellmouseclick.aspx#Mtps_DropDownFilterText
http://www.functionx.com/vcnet/databases/masterdetailnav.htm
 

sara_she

Member
سلام
ممنونواز لينك هاي كه گذاشتيد . چرا وقتي من روي datagrid كليك ميكنم روال

کد:
private: System::Void dataGrid1_Navigate(System::Object *  sender, System::Windows::Forms::NavigateEventArgs *  ne)
		 {
		 }
باز مي شه . براي اينكه كد روال كليك روي جدول رو داشته باشيم مثل زماني كه روي button‌ كليك مي كنيم و روال مربوطه باز مي شه چه كاري بايد انجام بديم . من مي خوام بدونم روي كدوم ركورد از جدول كليك شده يا به عبارتي كدوم ركورد انتخاب شده تا با داده هاي اون بتونم كار كنم
 

saalek110

Well-Known Member
سلام . همان طور که دوست گرامی فرمودند به پنجره پراپرتی بروید و با زدن دکمه ای که در عکس پست قبل هست لیست رویدادها را بیاورید و رویداد مورد نظر را رویش (فکر کنم) دابل کلیک باید بشه تا رویداد باز بشه.
در مورد وی سی 20003 فکر کنم قضیه کمی فرق می کند. البته نمی دونم در این قضیه نیاز باشه یا نه. ولی همان طور که قبلا خودتان کار کرده بودید میشه به دیتاگرد کالومن اضافه کرد
و از پنجره پراپرتی به رویدادهای آن هم میشه دسترسی داشت.
البته هر رویداد ورودی هایی دارد که برای طرز استفاده از آنها به سایتها مثل همین سایتهایی که جناب night معرفی کردند مراجعه کنید.
 

sara_she

Member
سلام
ممنون از راهنماييتون

يه سوال داشتم طبق گفته شما به event ها مراجعه كردم براي اكثر شون مثل click و dbclick وقتي ليست شون رو باز مي كنم انتخاب هاشون روال ها يا توابع به كار رفته تو كد است مثلا button1.click مي شه توضيح بدين اين گزينه هابه چه كار مي ياد و اگه انتخابي صورت نگيره و خودمون يه نام بذاريم چه تفاوتي مي كنه؟ فكر كنم وقتي خودمون يه اسم مي گذاريم روال جديدي ايجاد مي شه و وقتي مثلا button1.click رو انتخاب كنيم براي datagrid.click با كليك روي datagrid روال button1.clickاجرا مي شه . درسته؟

سوال ديگه اينكه فرق click روي يك رديف datagrid با currentcellchange چيه ؟ فكر كنم يه جوراييcurrentcellchange، click رو در بر مي گيره
 
آخرین ویرایش:

saalek110

Well-Known Member
با سلام.
سئوال اولتون را نمی دونم درست متوجه شدم یا نه ولی چیزی را که فهمیدم جواب می دهم:

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

من در سی شارپ 2005 یک پروژه ویندوزی ساختم و یک باتون روی فرم انداختم . بعد با دابل کلیک روی باتون روال کلیک آن را می سازم که میشه این:

کد:
        private void button1_Click(object sender, EventArgs e)
        {

        }

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

حالا وصل شدن در کجا صورت می گیرد؟ وقتی روی ابزار در فرم دابل کلیک می کنیم یا از پنجره پراپرتی روی رویداد مورد نظر دابل کلیک می کنیم.... کدهای دیگری هم اضافه میشه.
در مثال بالا من به فایل form1.designer.cs می روم .... دارم:

کد:
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(71, 103);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
[COLOR="Red"]
            this.button1.Click += new System.EventHandler(this.button1_Click);[/COLOR]

کد قرمز بالا فکر کنم داره این را می گه : داره دستور می دهد که تابع this.button1_Click ( یعنی تابعی با نام button1_Click موجود در فرم ) به لیست توابع رویداد کلیک اضافه بشه.

من برای امتحان این کد را زیر کد قرمز اضافه می کنم:

کد:
this.button1.Click += new System.EventHandler(this.my_function);

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

کد:
        private void button1_Click(object sender, EventArgs e)
        {

        }
[COLOR="#ff0000"]
        private void my_function(object sender, EventArgs e)
        {
            MessageBox.Show("print in my_function");[/COLOR]
        [COLOR="Red"]}[/COLOR]

با اجرای برنامه بالا با کلیک بر روی فرم تابع my_function اجرا میشه و مسیج باکس داخلش اجرا میشه.
البته قبلش من این طوری هم امتحان کردم:

کد:
        private void my_function()
        {
            MessageBox.Show("print in my_function");
        }

که برنامه روی خط :

کد:
this.button1.Click += new System.EventHandler(this.my_function);

خطای زیر را می دهد:
No overload for 'my_function' matches delegate 'System.EventHandler'

که به خاطر ورودی های ناسازگاری است که رویداد کلیک انتظار ندارد.

==============
در مورد سئوال دوم : من آن رویداد را نمی شناسم و نمی دانم چه مواقعی کار می افتد.
 

sara_she

Member
فكر كنم منظور من رو درست متوجه نشديد ولي در هر حال جوابتون برام قابل قبول و قانع كننده بود
ممنون
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا