سیستم نظرسنجی با نمایش نتایج در Asp.Net

سه شنبه 23 تیر 1394

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

سیستم نظرسنجی با نمایش نتایج  در Asp.Net

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

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 قرار دادیم تا به مد نمایش نتایج برویم .
نتیجه را در مرورگر خود ببینید :


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

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

فایل های ضمیمه

ایمان مدائنی

نویسنده 1299 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید