# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > مقالات مرتبط با Microsoft .Net Framework >  آموزش :: ساخت سیستم نظرسنجی

## rtech

کلیه حقوق این مظلب متعلق به سایت www.Barnamenevis.org میباشد .
نقل از نوشته های این مقاله منوط به ذکر نام منبع و نویسنده آن است.

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

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

1 - PollQuestions  : این جدول شامل فیلدهای زیر میباشد و برای ذخیره سوالات نظر سنجی استفاده میشود :



PollID  : این فیلد برای ذخیره ID  مورد نظر استفاده میشود و آن را به صورت کلید اصلی تعریف میکنیم . Identity  این فیلد را نیز Yes  میکنیم .
AddedDate  : تاریخ اضافه شدن سوال را مشخص میکند .
AddedBy  : مشخص میکند این سوال توسط چه کسی ایجاد شده و این برای سایتهایی که چند مدیر دارند بسیار مناسب خواهد بود .
QuestionText  : همانطور که از نام فیلد مشخص میباشد برای ذخیره سوال نظر سنجی استفاده میشود .
IsCurrent : مشخص میکند که آیا این نظرسنجی به عنوان نظرسنجی فعال انتخاب شود یا خیر .
IsArchived  : که برای آرشیو کردن نظرسنجی ها به کار میرود
ArchivedDate  : که تاریخ آرشیو شدن را نشان میدهد .

بر این اساس نظرسنجی فعال خواهد بود که Iscurrent آن برابر 1 و IsArchived  آن برابر 0 باشد. 

2 - PollOptions  : برای ذخیره Option های نظرسنجی به کار میرود و شامل فیلدهای زیر میباشد :




OptionID  : برای ذخیره ID  انتخاب ها به کار میرود ( Identity  برابر 1 انتخاب شود  - کلید اصلی )
AddedDate  : تاریخ اضافه شدن .
AddedBy  : فرد ایجاد کننده .
ID :  PollID  نظرسنجی که انتخاب ها مربوط به آن است .
OptionText  : متن انتخاب ها .
Votes  : تعداد رای های مربوط به این انتخاب .

3 - PollResult  : این جدول برای ذخیره کاربرانی که به نظرسنجی ها رای میدهند استفاده میشود که شامل فیلدهای زیر میباشد :




ID : Poll ID  نظرسنجی فعال
PollChoice  : گزینه ای که توسط کاربر انتخاب شده .
MemberID  : نام کاربری یا ID  کاربر .

این جدول برای این استفاده میشود که بتوانیم تشخیص دهیم که چه کسی به این نظر سنجی رای داده است تا اگر خواست برای بار دوم رای دهد از این عمل وی جلوگیری کنیم . اگر میخواهید فقط کاربران عضو رای دهند میتوانید از MemberID  برای ذخیره آنها استفاده کنید و اگر میخواهید کاربران مهمان هم رای دهند میتوانید از IP  آنها استفاده کنید یا اینکه به جای استفاده از این جدول میتوانید از کوکی ها استفاده کنید ( که البته من این مورد رو پیشنهاد نمیکنم )
میرویم سر اصل مطلب :
 ------------------------

* ذخیره نظر سنجی ها در بانک * 
با توجه به اینکه عمل ذخیره کردن سوالات و انتخاب ها با چند دستور ساده Insert  انجام میشود از این قسمت میگذریم و به مرحله بعد میریم ( البته اگر در این قسمت مشکلی داشتید سوال کنید ) Stored Procedure  های ذخیره در فایل Sample  موجود است که میتوانید از آنها استفاده کنید . 
توجه : مقدار فیلد Votes  در جدول PollOptions  باید در زمان ایجاد انتخاب ها 0 باشد .

------------------------

** بازیابی نظرسنجی از بانک و قرار دادن آن در صفحه **
من برای این کار از کنترل PollControl  استفاده کردم این ابزار کاملا رایگان میباشد اما قبل از استفاده از آن به بررسی خصوصیات این کنترل میپردازم :
Properties  :
Canvote  : اگر مقدار آن را True  کنید کنترل به مود انتخاب میرود و کاربر میتواند یکی از گزینه ها را انتخاب کند و اگر مقدار آن را False  کنید به مود نمایش میرود .

PollQuestion  : سوالی که به کاربر نشان داده میشود .

CSSCaption  : کلاس استایل شیت مربوط به Caption  و سوال را مشخص میکند
CssPollClass   : کلاس مورد استفاده کنترل را مشخص میکند .
ImagesFolder : پوشه حاوی تصاویر مربوط به این کنترل را مشخص میکند .
VoteCaption  :  متنی را نشان میدهد که تعداد کل آراء را نشان میدهد به عنوان مثال : ( تعداد آراء : )

همچنین این کنترل یک Event  به نام CastVote نیز دارد که وقتی کاربر دکمه تایید را انتخاب میکند رخ میدهد .

اما برای استفاده از این کنترل فایل PollControl.Dll  و فولدر Image  مربوط و همچنین فایل های CSS  مربوط به این کنترل را به پروژه اضافه میکنیم و از تگ زیر برای استفاده از آن استفاده میکنیم :


<%@ Register Assembly="PollControl" Namespace="EccSoft.Web.UI" TagPrefix="cc1" %>

و یک نمونه از این کنترل را در صفحه قرار میدیم :


<cc1:PollControl id="Pollcontrol1" runat="server" csscaption="PollCaption" cssclass="Normal"
                        csspollclass="PollBack" votescaption="تعداد آراء :"
                        width="206px" style="font-family: tahoma" Font-Names="tahoma"></cc1:PollControl>


امیدوارم که خسته نشده باشید .
حالا میرسیم به جایی که باید نظرسنجی را از بانک بخونیم و در این کنترل قرار دهید .
برای اینکه ما باید نظرسنجی فعال را از بانک بگیریم و در کنترل قرار دهیم :
در Page_Load  کدهای زیر را وارد کنید :

        Dim connection As New SqlConnection(ConfigurationManager.ConnectionStrin  gs("UserPolls").ToString)
        Dim cmd As SqlCommand
        Dim cmdtext As String
        Dim obj As SqlDataReader

        If Not Me.Page.IsPostBack Then
            Pollcontrol1.CanVote = True
            ' Add Question Text To Poll Control
            cmdtext = "select QuestionText from PollQuestions where Iscurrent=1 and Isarchived=0"
            cmd = New SqlCommand(cmdtext, connection)
            connection.Open()
            Pollcontrol1.PollQuestion = cmd.ExecuteScalar
            connection.Close()


            cmdtext = "select optionID,PollID,OptionText,Votes from PollOptions where pollID in(select PollID from Pollquestions where Iscurrent=1 and Isarchived=0)"
            cmd = New SqlCommand(cmdtext, connection)
            connection.Open()
            obj = cmd.ExecuteReader
            ' Add Options To Poll Control :
            While obj.Read
                Pollcontrol1.AddPollAnswer(obj("pollID"), obj("optionID"), obj("optionText"), obj("votes"))
            End While
            connection.Close()
            obj.Close()

        End If


خوب ما در اینجا متن سوال و option  های آن را از جداول PollQuestion  و  PollOptions  گرفتیم و در کنترل Poll Control  قرار دادیم .  یک بار برنامه را در مرورگر اجرا کنید :




همانطور که ملاحظه میکنید  سوال و option  های نظر سنجی با موفقیت در کنترل قرار گرفته اند.
حالا باید ایونت مربوط به کلیک کاربر را بنویسیم :
کدهای زیر را به ایونت Pollcontrol1_CastVote اضافه کنید  ( به علت کمبود وقت من بدون چک کردن MemberID  انتخاب کاربر را در بانک ذخیره میکنم )


        ' Update PollOptions Without Check MemberID
        Dim connection As New SqlConnection(ConfigurationManager.ConnectionStrin  gs("UserPolls").ToString)
        Dim com As New SqlCommand("update pollOptions set answercount=answercount+'1' where OptionID=@answerID", connection)
        connection.Open()
        com.Parameters.Add("@optionID", SqlDbType.Int).Value = Int(AnswerId)
        com.ExecuteNonQuery()
        connection.Close()
        Response.Redirect("result.aspx")


شما میتوانید از کوکی ، IP  و یا کدکاربری و .. برای تشخیص کاربر رای دهنده استفاده کنید.
خوب ما در اینجا به مقدار فیلد Votes یکی اضافه میکنیم و سپس برای نمایش نتیجه به صفحه Result  میرویم .
اما در Page_load  صفحه Result  کدهای زیر را مینویسیم :


        Dim connection As New SqlConnection(ConfigurationManager.ConnectionStrin  gs("UserPolls").ToString)
        Dim cmd As SqlCommand
        Dim cmdtext As String
        Dim obj As SqlDataReader

        If Not Me.Page.IsPostBack Then
            Pollcontrol1.CanVote = False
            cmdtext = "select optionID,PollID,OptionText,Votes from PollOptions where pollID in(select PollID from Pollquestions where Iscurrent=1 and Isarchived=0)"
            cmd = New SqlCommand(cmdtext, connection)
            connection.Open()
            obj = cmd.ExecuteReader
            ' Add Options To Poll Control :
            While obj.Read
                Pollcontrol1.AddPollAnswer(obj("pollID"), obj("optionID"), obj("optionText"), obj("votes"))
            End While
            connection.Close()
            obj.Close()

        End If


اگر دقت کرده باشید ما در اینجا Canvatoes  را برایر False  قرار دادیم تا به مد نمایش نتایج برویم .
نتیجه را در مرورگر خود ببینید :




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

موفق و پیروز باشید .
نویسنده : رامین احمدی

::::::::::: لطفا برای تشکر به جای ایجاد پست جدید از دکمه تشکر استفاده نمایید :::::::::::::

دانلود سورس :

----------


## rezafars

سلام من از شما برای استفاده از این کد در asp.net 2003  کمک کی خوام

----------


## rtech

شما در VS 2003  چه مشکلی دارید ؟

----------


## rtech

فکر نمیکنم برای اجرا در محیط 2003 مشکلی داشته باشید !

----------


## rezafars

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

----------


## rtech

چه اروری دریافت کردید ؟

----------


## rezafars

با سلام 
با کد نویسی این کد در ویرایش گر html  در قسمت برنامه نویسی چنین کنترلی رو قبول نمی کند

----------


## hamidyha

با سلام
من با نرم افزار دریم ویوور سایت طراحی کرده ام پس از ایجاد بانک اطلاعاتی در SQL Server دو مشکل دارم
1- در ارتباط با بانک خطا تولید می کند در صورتی که اگر بانک Access باشد مشکلی ندارد وقت خروجی دیتا را نمایش نمی‌دهد.
2- کدهای نوشته شده را در کجای صفحه وارد نمایم
با تشکر

----------


## rtech

> با سلام
> من با نرم افزار دریم ویوور سایت طراحی کرده ام پس از ایجاد بانک اطلاعاتی در SQL Server دو مشکل دارم
> 1- در ارتباط با بانک خطا تولید می کند در صورتی که اگر بانک Access باشد مشکلی ندارد وقت خروجی دیتا را نمایش نمی‌دهد.
> 2- کدهای نوشته شده را در کجای صفحه وارد نمایم
> با تشکر


1 - لطفا کدی که برای کانکت شدن نوشتید را اینجا بزارید تا ببینم خطا برای چیست 
2 - آیا شما از Asp.net  برای نوشتن کدهاتون استفاده میکنید ؟ اگر جواب بله میباشد اگر به فایل ضمیمه توجه کنید متوجه خواهید شد که در کجا باید استفاده کنید .

----------


## hamidyha

در نرم افزار دریم ویور در بخش Application روی گزینه Database کلیک می‌کنم و ... که تصویر آن ضمیمه می‌باشد. لطفاً راهنمایی کنید

----------


## oracle_2007

سلام دوست عزيز
ميشه لطف كنين بگين براي اينكه تعداد آراء رو در بالاي كنترل برداريم ، بايد چيكار كنم ؟(البته فقط در قسمت مربوط به راي دادن )ممنونم

----------


## jafaripur

لااقل به اسم خودت که میزنی بگو که فقط ترجمش کردی ...
لینک اصلی این کنتل :  http://www.codeproject.com/KB/aspnet...l_Control.aspx

----------


## jafaripur

فقط یه ایراد داره و این هستش که وقتی هیچ کدوم از گزینه ها رو انتخاب نمی کنید با وجود این که اولین گزینه انتخاب شده ولی با کلیک بر روی یکی از گزینه ها AnswerID درست رو میفرسته واگر نه اگر کلیک نکنید مقدار AnswerID =1 میفرسته ...
نسخه اصلاح شده کنترل رو میزارم ...
سورس رو می زارم که اگه خواستین تغییر بدینش ...  :چشمک:

----------


## mh_663

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

----------


## reza1078

اگه برای C#‎ هم انجام می دادید عالی می شد

----------


## asd_moghadas

کد سی شارپ ؟

----------


## amirkhoyli

باسلام 
آیا بانک اطلاعاتی موحود بر روی ایم فایل از نوع sql2000 هست؟
آخم من نمیتونم بر روی sql2000 این فایل را attach کنم......

----------


## jingiliboyz

من برنامه رو گرفتم اجرا شد ایراد هم نگرفت مرسی از همه دوستان

----------


## ghazizadeh

کد  سی شارپ 

    protected void Page_Load(object sender, EventArgs e)
    {
       if (IsPostBack)
            return;


        string connStr = "packet size=4096;Data Source=192.168.1.233,1433;Network Library=DBMSSOCN;Initial Catalog=*****;User ID=****;Password=****";
        SqlConnection connpoll = new SqlConnection(connStr);
        poll1.CanVote = true;
        string cmdtext = "select QuestionText from PollQuestions where Iscurrent=1 and Isarchived=0";
        SqlCommand cmd = new SqlCommand(cmdtext, connpoll);
        connpoll.Open();

        poll1.PollQuestion = (string) cmd.ExecuteScalar();
      //  connpoll.Close();
        cmdtext = "select optionID,PollID,OptionText,Votes from PollOptions where pollID in(select PollID from Pollquestions where Iscurrent=1 and Isarchived=0)";
        cmd = new SqlCommand(cmdtext, connpoll);
      //  connpoll.Open();
        SqlDataReader objpoll = cmd.ExecuteReader();
        while (objpoll.Read())
        {
            poll1.AddPollAnswer((int)objpoll["pollID"], (int)objpoll["optionID"], (string)objpoll["optionText"],(int) objpoll["votes"]);
        }
        connpoll.Close();
        objpoll.Close();


    }

    protected void poll1_CastVote(int PollId, string AnswerId, int MemberId)
    {
 // Update PollOptions Without Check MemberID
        lblPDate.Text = "ddddd";
        string connStr2 = "packet size=4096;Data Source=192.168.1.233,1433;Network Library=DBMSSOCN;Initial Catalog=***;User ID=****;Password=***x";
            SqlConnection connpoll = new SqlConnection(connStr2);
            SqlCommand conn2 = new SqlCommand("update pollOptions set votes=votes+'1' where OptionID=@optionID", connpoll);
            connpoll.Open();
            conn2.Parameters.Add("@optionID", SqlDbType.Int).Value = Convert.ToUInt32(AnswerId);
            conn2.ExecuteNonQuery();
            connpoll.Close();
            Response.Redirect("result.aspx");
    }

این هم کد نتیجه نظرسنجی
    protected void Page_Load(object sender, EventArgs e)
    {

        string connStr = "packet size=4096;Data Source=192.168.1.233,1433;Network Library=DBMSSOCN;Initial Catalog=****;User ID=****l;Password=****x";
        SqlConnection connpoll = new SqlConnection(connStr);
        poll1.CanVote = false;
        string cmdtext = "select optionID,PollID,OptionText,Votes from PollOptions where pollID in(select PollID from Pollquestions where Iscurrent=1 and Isarchived=0)";
        SqlCommand cmd = new SqlCommand(cmdtext, connpoll);
        connpoll.Open();

         SqlDataReader objpoll = cmd.ExecuteReader();
        while (objpoll.Read())
        {

            poll1.AddPollAnswer((int)objpoll["pollID"], (int)objpoll["optionID"], (string)objpoll["optionText"], (int)objpoll["votes"]);
        }
        connpoll.Close();
        objpoll.Close();

    }

----------


## rezvan.j

سلام دوستان . 

من می خوام از این کنترل استفاده کنم ولی اون رو در کنترل هام ندارم choss item چنین گزینه ای نداره .

----------


## nasr

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

ممنون

----------


## nasr

سلام
من تبدیلش کردم به C sharp 
امیدوارم به دردتون بخوره

----------


## hamid_cross

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

----------


## SianiD

> سلام
> من تبدیلش کردم به C sharp 
> امیدوارم به دردتون بخوره


دوست عزیز من خیلی سعی کردم بازش کنم اما نشد :(

----------


## dontbehzad

دستتون درد نکنه.
خیلی خوبه. ایراد هم نداره فقط یه اشکال کوچیک داره اونم  اینکه :
*obj.Close() * قبل از *connection.Close()* باید بیاید  ! نه بعدش

*سوال* چطوری border دور باتن رای دهید را بردارم یا عکس این باتن را تغییر بدم ؟

----------


## nadia2174

سلام. من کد شما رو به C#‎ تبدیل کردم ولی خطاهای زیادی میده و نمیدونم چطور درستش کنم.
اگه ممکنه کد C#‎  این آموزش رو هم بزارید.
ممنون

----------


## amir22448

> کلیه حقوق این مظلب متعلق به سایت www.Barnamenevis.org میباشد .
> نقل از نوشته های این مقاله منوط به ذکر نام منبع و نویسنده آن است.
> 
> با سلام و با اجازه اساتید .
> حتما برای شما پیش آمده باشد که بخواهید یک سیستم نظرسنجی در سایت خود قرار دهید اما شاید وقت ساخت این سیستم را نداشته باشید . به همین خاطر من آموزش ساخت این سیستم را برای شما آماده کردم که امیدوارم مفید واقع بشه :
> 
> ابتدا از ساخت بانک اطلاعاتی و جداول مورد نیاز برای این سیستم شروع میکنیم .
> برای ساخت این سیستم از سه جدول استفاده میکنیم :
> 
> ...



سلام خیلی خوب بود ولی اگه می شه به زبان C#‎ هم بزارید. :لبخند:

----------


## amir22448

> آقا سلام من تازه می خوام سی شارپ یاد بگیرم از کجا باید شروع کنم


سلام. بهتره از کتاب های انگیلیسی شروع کنید.این کتاب مفیده:

http://books.google.com/books?id=pKT...20C%23&f=false

----------


## razeghaik1

سلام.دوستان کسی کد C#‎ این مطلب (ساخت سیستم نظر سنجی رو داره؟!)
من تبدیلش کردم اما چواب نداد و ارور می ده و کدی هم که این دوستمون قرار داد باز جواب نداد.

----------


## fakhravari

سورس این برنامه به زبان vb ایا دوستان C#‎‎ دارن!!
از سایت های convert هم استفاده کردم اما خطا داره. :متفکر:

----------

