• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

کار با کنترلها در سی شارپ

saalek110

Registered User
تاریخ عضویت
10 آپریل 2007
نوشته‌ها
212
لایک‌ها
1
کار با کنترلها در سی شارپ

در این تاپیک می خواهیم استفاده از ابزارهای جعبه ابزار را تمرین کنیم.
مثل دیتاگرد - تکست باکس و غیره.

و از قبیل پراپرتی های آنها و متدها و رویدادهای آنها.
 

saalek110

Registered User
تاریخ عضویت
10 آپریل 2007
نوشته‌ها
212
لایک‌ها
1
دانلود سورس از : http://www.cy2online.net/Downloads.php?Language=CSharp&ID=63&Category=Controls

موضوع : پر کردن سلولهای یک دیتاگردویو

روش کار :
یک دیتاگرد ویوو روی فرم ( پروژه ویندوزی سی شارپ 2005 ) قرار دهید. اندازه اش را طبق شکل کمی بزرگ کنید.
با دابل کلیک روی فرم رویداد فرم-لود را آماده کدنویسی کنید.
کد زیر را درون آن قرار دهید.
برنامه را اجرا کنید.

کد:
// naame soton....onvane soton
dataGridView1.Columns.Add("colName", "Name");
dataGridView1.Columns.Add("colSurName", "Last Name");
dataGridView1.Columns.Add("colAge", "Age");
dataGridView1.Columns.Add("colGender", "Gender");
dataGridView1.Columns.Add("colName", "E-mail");

string[] DataResult1 = { "John", "Doe", "30", "Male", "[email protected]" };
string[] DataResult2 = { "Jane", "Doe", "25", "Female", "[email protected]" };
string[] DataResult3 = { "Patric", "O' Neil", "32", "Male", "[email protected]" };
string[] DataResult4 = { "Sue", "Baily", "23", "Female", "[email protected]" };
string[] DataResult5 = { "Wendy", "Wong", "28", "Female", "[email protected]" };

dataGridView1.Rows.Add(DataResult1);
dataGridView1.Rows.Add(DataResult2);
dataGridView1.Rows.Add(DataResult3);
dataGridView1.Rows.Add(DataResult4);
dataGridView1.Rows.Add(DataResult5);

e4.gif
 

saalek110

Registered User
تاریخ عضویت
10 آپریل 2007
نوشته‌ها
212
لایک‌ها
1
در این پست می خواهیم دیتاگرد را به یک دیتاتیبل وصل کنیم.

ابزارها: یک دیتاگرد ویو ( در یک پروژه ویندوزی سی شارپ 2005 )

کد Form1.cs :
کد:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace datagird_changes
{
    public partial class Form1 : Form
    {
      [COLOR="Red"]  private DataTable dt;[/COLOR]

        public Form1()
        {
            InitializeComponent();
          [COLOR="#ff0000"]  dt = new DataTable("Names");[/COLOR]
        }
[COLOR="#ff0000"]
        private void Form1_Load(object sender, EventArgs e)
        {
           //  Create the schema for the table of names.
			dt.Columns.Add("Name");
			dt.Columns.Add("City");
            dataGridView1.DataSource = dt;
        }[/COLOR]
    }
}

قسمتهایی که قرمز است را من اضافه کرده ام. به این طریق ما یک دیتاگردویوی وصل شده به دیتاتیبل داریم.
این سبک تعریف کردن دیتاتیبل در دو جا و وصل کردن در فرم-لود را از یک سورس سایت مبکروسافت که وی سی + دات نت 2003 بود گرفتم.
حالا می خواهم از خودم و با کمک تاپیک زیر:
http://www.barnamenevis.org/forum/showthread.php?t=35466
برنامه ای بسازم که یک سری کارهایی بکند.
 

saalek110

Registered User
تاریخ عضویت
10 آپریل 2007
نوشته‌ها
212
لایک‌ها
1
حالا در همان پروژه قبلی یک باتون و دو تکست باکس بیافزایید.
و کد زیر را برای کلیک باتون قرار دهید:

کد:
            DataRow myDataRow = dt.NewRow();

			//  Fills in the data
			myDataRow[0] = textBox1.Text;
            myDataRow[1] = textBox2.Text;

			//   Adds the new Row to the people DataTable
			dt.Rows.Add(myDataRow);

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

فعلا تا اینجا بماند تا بعد. شما هم می توانید با تاپیکی که معرفی کردیم و سرچ در گوگل کارهایی بکنید. من هم بعدا اگر توانستم ادامه این پروژه را می نویسم.
 

saalek110

Registered User
تاریخ عضویت
10 آپریل 2007
نوشته‌ها
212
لایک‌ها
1
یک دکمه و یک تکست باکس و یک لیست باکس به فرم بیافزایید.
به رویداد کلیک دکمه کد زیر را بیافزایید:

کد:
listBox1.Items.Add(textBox1.Text);

با این برنامه هر چیزی داخل تکست باکس بنویسید و دکمه را بزنید به سطرهای لیست باکس اضافه می شود.

e6.gif

منبع:
http://www.geekpedia.com/tutorial40_ListBox-and-CheckedListBox.html

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

propertiesItems.gif


موضوع : برداشتن یک آیتم.

ابزارها: یک تکست باکس - یک لیست باکس - دو دکمه.

در دکمه اول کد زیر را اضافه کنید:

کد:
            if (textBox1.Text == "")
            {
                MessageBox.Show("Please enter a name.", "No name entered", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                listBox1.Items.Add(textBox1.Text);
            }

برای دکمه دوم این کد را:

کد:
            if (listBox1.SelectedIndex == -1)
            {
                MessageBox.Show("Please select an item first.", "No item selected", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                listBox1.Items.RemoveAt(listBox1.SelectedIndex);
            }

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

Neo.BHK

کاربر تازه وارد
تاریخ عضویت
22 آپریل 2007
نوشته‌ها
338
لایک‌ها
1
محل سکونت
Tehran
ممنون از شما.
درباره web application هم بنویسین
 

saalek110

Registered User
تاریخ عضویت
10 آپریل 2007
نوشته‌ها
212
لایک‌ها
1
من راستش وب اپلیکیشن تاحالا کار نکردم. ولی خیلی دوست دارم کار کنم. اگر یک نفر بگه به چه چیزهایی نیاز هست برای کار با اون من خیلی مشتاقم برای پیگیری.

منظورم اینه که سایت می خواد؟ یا ارتباط با سروره؟ خلاصه چیه؟

راستی همین جا از راهنمایی برای اتصال به دیتابیس از شما تشکر می کنم . کلی راه افتادم.
در این تاپیک : بانك اطلاعاتي در سی شارپ
 

Neo.BHK

کاربر تازه وارد
تاریخ عضویت
22 آپریل 2007
نوشته‌ها
338
لایک‌ها
1
محل سکونت
Tehran
من راستش وب اپلیکیشن تاحالا کار نکردم. ولی خیلی دوست دارم کار کنم. اگر یک نفر بگه به چه چیزهایی نیاز هست برای کار با اون من خیلی مشتاقم برای پیگیری.

منظورم اینه که سایت می خواد؟ یا ارتباط با سروره؟ خلاصه چیه؟

راستی همین جا از راهنمایی برای اتصال به دیتابیس از شما تشکر می کنم . کلی راه افتادم.
در این تاپیک : بانك اطلاعاتي در سی شارپ

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

چی می خوای بدونی که توضیح بدم؟

البته می خوای از بحث اصلی تاپیک دور نشیم.
 

saalek110

Registered User
تاریخ عضویت
10 آپریل 2007
نوشته‌ها
212
لایک‌ها
1
راجع به وب اپلیکیشن و میزان شباهتش با ویندوز اپلیکیشن زیاد نمی دونم . و نمی دانم میشه کار با کنترلها را همزمان در هر دو به طور موازی گفت یا نه. کمی تمرین می کنم و شاید مقدماتش را در یک تاپیک دیگه گفتم و بعد اگر بشه کار با ابزارها را در همین تاپیک به شکل مقایسه ای بین وب اپلیکیشن و ویندوز اپلیکیشن مطرح می کنم.
 

alireza sh

مدیر بازنشسته
تاریخ عضویت
2 ژانویه 2006
نوشته‌ها
2,775
لایک‌ها
70
سن
41
محل سکونت
نصف جهان
با تشکر از سالک گرامی

در خصوص تغییرات کنترلها در وب اپلیکیشن ها ، بنده عرض کنم که اگر محیط پیاده سازی وب اپلیکیشن ، ASP.NEt باشد ، تا حدودی شباهت دارند . البته در خصوص event ها دیگر توفع نداشته باشید که همه event ها را داشته باشید .

در برخی از کنترلها هم نامها فرق میکند. مثلا در وب برای بایند کردن یک drop down که در ویندوز به آن combo box میگوییم ، دو ویژگی به نامهای datatextfield و datavaluefirld دارد که که در ویندوز به انها displaymemberld و ... گفته میشود .

و موراد بسیار دیگر. ولی اصول کلی همان است .

البته در وب ، بر خلاف ویندوز ، برای بایند شدن اطلاعات به کنترل مورد نظر بایتی حتما متد dataBind را فرواخوانی کنیم که در ویندوز نیازی به آن نیست .
 

saalek110

Registered User
تاریخ عضویت
10 آپریل 2007
نوشته‌ها
212
لایک‌ها
1
ممنون از توضیحات خوب شما. خیلی مفید بود.
 

saalek110

Registered User
تاریخ عضویت
10 آپریل 2007
نوشته‌ها
212
لایک‌ها
1
درباره web application هم بنویسین

سلام
این هم یک برنامه ساده . البته سورسش را هم از خود این سایتی که فضا داده کپی کردم.

کد:
<%@ Page Language="c#" %>

<script runat="server">

void Page_Load(Object src, EventArgs e) {
        
    Label1.Text = "Hello World, it's " + System.DateTime.Now.ToString();

}

</script>

<html>
	<head>
		<title>My First .NET Page, Hello World</title>
	</head>
	<body>
		<form id="Form1" method="post" runat="server">
                <asp:label id="Label1" runat="server"></asp:label>
		</form>
	</body>
</html>

http://saalek.brinkster.net/a22/hello_world_c_sharp.aspx

نتیجه اجرا:
Hello World, it's 7/20/2007 6:08:12 PM

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

saalek110

Registered User
تاریخ عضویت
10 آپریل 2007
نوشته‌ها
212
لایک‌ها
1
در این پست می خواهیم دیتاگرد را به یک دیتاتیبل وصل کنیم.

ابزارها: یک دیتاگرد ویو ( در یک پروژه ویندوزی سی شارپ 2005 )

کد Form1.cs :
کد:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace datagird_changes
{
    public partial class Form1 : Form
    {
      [COLOR="Red"]  private DataTable dt;[/COLOR]

        public Form1()
        {
            InitializeComponent();
          [COLOR="#ff0000"]  dt = new DataTable("Names");[/COLOR]
        }
[COLOR="#ff0000"]
        private void Form1_Load(object sender, EventArgs e)
        {
           //  Create the schema for the table of names.
			dt.Columns.Add("Name");
			dt.Columns.Add("City");
            dataGridView1.DataSource = dt;
        }[/COLOR]
    }
}

قسمتهایی که قرمز است را من اضافه کرده ام. به این طریق ما یک دیتاگردویوی وصل شده به دیتاتیبل داریم.
این سبک تعریف کردن دیتاتیبل در دو جا و وصل کردن در فرم-لود را از یک سورس سایت مبکروسافت که وی سی + دات نت 2003 بود گرفتم.

من یک تاپیک زدم اینجا:
تمرینات و آموزشهایی در Asp.net

چون اینجا تالار asp.net نیست و درست نبود اینجا بزنم. کمی تمرینات مقدماتی آن را انجام دادم. سئوالات و اشکالاتی هم در آن تاپیک داشتم که گفته ام. اگر کسی وقت کرد آنجا یا اینجا بگوید تا اصلاح کنم.

اما یکی از پستها مربوط به بحث اینجا است که نقل می کنم:
یعنی برنامه ای که کوتو کرده ام در بالا ویندوز اپلیکیشنی است و پایینی وب اپلیکیشنی.

کد:
<%@ Page language="c#" debug="true" EnableViewState="true" trace="false" %>
<%@ Import Namespace="System.Data" %>
<%@ Import NameSpace="System.Data.OleDb" %>

<script language="c#" runat="server">

private void Page_Load(Object sender,EventArgs e)
{

MyDataBind();

}

private void MyDataBind()
{
    DataTable dt = new DataTable();
    DataRow dr;
    Boolean b = false;

    ArrayList arrDateTime = new ArrayList();
    arrDateTime.Add("01/01/92 12:00 am");
    arrDateTime.Add("02/26/64 12:00 am");
    arrDateTime.Add("04/03/60 12:00 am");
    arrDateTime.Add("01/11/95 12:00 am");
    arrDateTime.Add("11/01/96 12:00 am");
    arrDateTime.Add("12/25/97 12:00 am");
    arrDateTime.Add("02/15/98 12:00 am");
    arrDateTime.Add("07/04/76 12:00 am");
    arrDateTime.Add("09/11/01 12:00 am");
    arrDateTime.Add("12/07/41 12:00 am");

    dt.Columns.Add(new DataColumn("IntegerValue", System.Type.GetType("System.Int32")));
    dt.Columns.Add(new DataColumn("StringValue", System.Type.GetType("System.String")));
    dt.Columns.Add(new DataColumn("CurrencyValue", System.Type.GetType("System.Double")));
    dt.Columns.Add(new DataColumn("BooleanValue", System.Type.GetType("System.Boolean")));
    dt.Columns.Add(new DataColumn("DateTimeValue", System.Type.GetType("System.DateTime")));
       
    for (int i = 0; i < 10; i++)
    {
        b = !b;

        dr = dt.NewRow();
        
        dr[0] = i;
        dr[1] = "Item " + i.ToString();
        dr[2] = 10000.23 *(i + 1);
        dr[3] = b;
        dr[4] = arrDateTime[i];

        dt.Rows.Add(dr);
    }
        
    MyGrid.DataSource = new DataView(dt);
    MyGrid.DataBind();
}
</script>

<html>
<body>
<center>
<form id="MyForm" runat="server" method="POST">
 <asp:DataGrid id="MyGrid" runat="server"/>
</form>
</body>
</html>

http://saalek.brinkster.net/a22/DataGrid.aspx


نتیجه اجرا:
البته باید عکس می گرفتم چون در زیر بهم ریخته است و شکل جدول هم نیست ولی نشد.
کد:
IntegerValue	StringValue	CurrencyValue	BooleanValue	DateTimeValue
0	Item 0	10000.23	True	1/1/1992 12:00:00 AM
1	Item 1	20000.46	False	2/26/1964 12:00:00 AM
2	Item 2	30000.69	True	4/3/1960 12:00:00 AM
3	Item 3	40000.92	False	1/11/1995 12:00:00 AM
4	Item 4	50001.15	True	11/1/1996 12:00:00 AM
5	Item 5	60001.38	False	12/25/1997 12:00:00 AM
6	Item 6	70001.61	True	2/15/1998 12:00:00 AM
7	Item 7	80001.84	False	7/4/1976 12:00:00 AM
8	Item 8	90002.07	True	9/11/2001 12:00:00 AM
9	Item 9	100002.3	False	12/7/1941 12:00:00 AM

البته این مطالب ساده به کار دوستم behak-behak نمی آید ولی من باید قدم قدم بروم جلو.
 

alireza sh

مدیر بازنشسته
تاریخ عضویت
2 ژانویه 2006
نوشته‌ها
2,775
لایک‌ها
70
سن
41
محل سکونت
نصف جهان
سالک جان

بنده با اجازه شما پیشنهادی دارم

متاسفانه یکی از مشکلات بزرگی که در بسیاری از asp.net کاران وجود دارد ، این است که به کنترلهای وب به چشم کنتلرهای ویندوز نگاه میکنند ! این موضوع در عدم بازدهی و طراحی اصولی سایت بسیار موثر است .

اساسا برای وب کار کردن باید یک دید وب ای (!) داشت . مثلا نباید اصلا به datagridوب ، به چشم همان datagrid ویندوز نگاه کرد وگرنه بازدهی کار بسیار پایین می آید

پیشنهاد من این است که در این تاپیک فقط به کنترلهای ویندوزی بپردازیم .و بحث وب را مکان دیگری موکول کنیم .

البته نظر شما شرط است چرا که آغازگر تاپیک شما هستید .

موفق باشید دوست گرامی
 

saalek110

Registered User
تاریخ عضویت
10 آپریل 2007
نوشته‌ها
212
لایک‌ها
1
با سلام.
اگر میشه کمی قضیه را توضیح بدهید. یعنی تفاوت استفاده از دیتاگرد در ویندوزی و وبی. خیلی باید جالب باشه تفاوتشان.من خودم هم سعی می کنم با سرچ چیزهایی پیدا کنم.
پیشنهاد شما را هم قبول کردم . یعنی در اینجا به کنترلهای ویندوزی خواهیم پرداخت. با اجازه دوستم behak-behak .
 

alireza sh

مدیر بازنشسته
تاریخ عضویت
2 ژانویه 2006
نوشته‌ها
2,775
لایک‌ها
70
سن
41
محل سکونت
نصف جهان
با سلام.
اگر میشه کمی قضیه را توضیح بدهید. یعنی تفاوت استفاده از دیتاگرد در ویندوزی و وبی. خیلی باید جالب باشه تفاوتشان.من خودم هم سعی می کنم با سرچ چیزهایی پیدا کنم.
پیشنهاد شما را هم قبول کردم . یعنی در اینجا به کنترلهای ویندوزی خواهیم پرداخت. با اجازه دوستم behak-behak .
چشم حتما

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

ضمنا ، datagrid در وب ، یک سری ایوینت هایی دارد که در ویندوز به آن شکل نداریم و بالعکس . مثلا در ویندوز شما رخداد های ویرایش سلول ، اضافه کردن سطر و ... را به راحتی دارید ولی در وب بدلیل تغییر بنیادین ساختار ، چنین امکاناتی را ندارید

ضمنا ، در ویندوز برای تقریبا همه کنترلها شما رخدادهای mouseover و drag و .... را دارید ولی در وب این امکانات را خودتان باید با جاوا اسکریپت پیاده سازی کنید .

موفق باشید
 

saalek110

Registered User
تاریخ عضویت
10 آپریل 2007
نوشته‌ها
212
لایک‌ها
1
ایول. خیلی نکات با حالی بود.
وقت نمیشه تالارهای وبی را برم اطلاعاتم خیلی کمه.
نکات مهم و خوبی را گفتید.
 

mohkami

کاربر تازه وارد
تاریخ عضویت
16 دسامبر 2008
نوشته‌ها
9
لایک‌ها
0
با سلام
من میخوام وقتی که توی یک Text box بعد از وارد کردن اطلاعات که Enter زده میشه به Button بعد بره و اون رو انجام بده.
من همچین کدی نوشتم ولی وقتی که Enter زده میشه صدای دینگ زده میشه و بعد انجام میشه کسی میدونه چجوری باید این کار رو انجام داد؟

کد:
private void Button_Click(object sender, EventArgs e)
        {
             MessageBox.Show("OK");
        }

        private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if(e.KeyChar==13)
            {
            Button.Focus();
            this.SelectNextControl(this.TextBox, true, true, true, true);
            string sender1 = "";
            EventArgs e1 = new EventArgs();
            this.Button_Click(sender1, e1);
            }
        }
 
Last edited:

Roby

کاربر فعال فوتبال<br> عضو تحریریه مجله فوتبال
کاربر فعال
تاریخ عضویت
20 ژوئن 2005
نوشته‌ها
1,263
لایک‌ها
1,395
چرا به جاي اينكار كد موجود در رويداد button_click را بصورت يك تابع نمي نويسيد به اين ترتيب تنها كاري كه بايد بكنيد اينست كه در زمان تشخيص كليد enter آن تابع را فراخواني كنيد
 
بالا