Chart kontrolü ile ANKET yapımı
Verilerin grafiksel olarak gösterilmesini sağlayan Chart kontrolü en favori Webforms nesnelerinden biridir.Bu kontrolü nasıl daha etkin kullanabilirim derken niçin anket yapmayalım sorusu aklıma geldi ve kolları sıvayıp başladım kod yazmaya.
Anketimizde kullanılmak üzere üç adet veritabanı tablosu hazırlıyoruz.
1.Anket sorusunun bulunduğu anket_soru_table tablosu

2.Oy kullananların ip adreslerini saklanacağı anket_ip tablosu

3.Anket seçeneklerinin bulunduğu anket_table tablosu

Default.aspx isimli bir Webforms oluşturalım ve anket için kaynak bölümünü hazırlayalım. Anket seçeneklerini kaynak bölümünde radibuttonlist kontrolüne aktardığıma dikkat edin. Bu ankette radiobuttonlistin etkili kullanımını da görmüş olacağız.
<asp:Panel ID="Panel1" runat="server">
<asp:Label ID="Label3" runat="server" Text=""></asp:Label>
<br />
<asp:RadioButtonList ID="RadioButtonList1" runat="server"
DataSourceID="SqlDataSource1" DataTextField="anket_secenekleri"
DataValueField="anket_secenekleri" >
</asp:RadioButtonList>
</asp:Panel>
<asp:Panel ID="Panel2" runat="server">
<asp:Label ID="Label2" runat="server"> </asp:Label>
</asp:Panel>
<br />
<asp:Button ID="Button1" runat="server" Text="Oyla" />
<asp:Button ID="Button2" runat="server" Text="Sonuçlar" />
<br />
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<br />
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:anket%>"
SelectCommand="SELECT * FROM [anket_table] WHERE ([anket_id] = @anket_id)">
<SelectParameters>
<asp:SessionParameter DefaultValue="0" Name="anket_id" SessionField="sec"
Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
Şimdi sıra geldi Code Behind bölümüne; Önce namespacelerimizi tanımlayalım;
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Configuration
Ve ardından Oyla butonuna şu kodu yazalım.
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ip As String = Request.ServerVariables("REMOTE_ADDR")
Dim bagla As New SqlConnection(WebConfigurationManager.ConnectionStrings("bag_str").ConnectionString)
bagla.Open()
For Each item As ListItem In RadioButtonList1.Items
If item.Selected = True Then
Dim saves As New SqlCommand("Update anket_table set anket_oylari=anket_oylari+1 where anket_secenekleri=`" & RadioButtonList1.SelectedItem.Text & "`", bagla)
Dim ipkayit As New SqlCommand("insert into anket_ip(ip) values (`" & ip & "`)", bagla)
saves.ExecuteNonQuery()
ipkayit.ExecuteNonQuery()
Session("Anketgör") = "gör"
Response.Redirect("anketsonuc.aspx")
Else
Label1.Text = "Lütfen bir seçenek seçiniz"
End If
Next
bagla.Close()
End Sub
Anket yüklenirken ise aşağıdaki kodları yazalım;
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Panel1.Visible = True
Panel2.Visible = False
Button2.Visible = False
Dim ip As String = Request.ServerVariables("REMOTE_ADDR")
Dim bagla As New SqlConnection(WebConfigurationManager.ConnectionStrings("bag_str").ConnectionString)
bagla.Open()
Dim ss As New SqlCommand("select * from anket_soru_table where aktif=1", bagla)
Dim soru As SqlDataReader = ss.ExecuteReader
If soru.Read Then
Me.Label3.Text = soru("soru")
Session("sec") = soru("anket_id")
End If
soru.Close()
Dim ipcont As New SqlCommand("Select * From anket_ip", bagla)
Dim ipkontrol As SqlDataReader = ipcont.ExecuteReader
While ipkontrol.Read
Dim vtip As String = ipkontrol("ip")
If ip = vtip Then
Panel1.Visible = False
Panel2.Visible = True
RadioButtonList1.Visible = False
Button1.Visible = False
Button2.Visible = True
Label2.Text = Label3.Text & "</br></br>Anketine daha önce oy kullandığınız için teşekkür ederiz."
Else
Panel1.Visible = True
Panel2.Visible = False
RadioButtonList1.Visible = True
Button1.Visible = True
Button2.Visible = False
End If
End While
bagla.Close()
ipcont = Nothing
ipkontrol.Close()
ss = Nothing
End Sub
Sonuçlar butonuna ise şu kodu yazıyoruz.
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
Session("Anketgör") = "gör"
Response.Redirect("anketsonuc.aspx")
End Sub
Buraya kadar anket kodları tamam simdi anketsonuc.aspx sayfasını chart kontrol kullanarak hazırlayalım
Kaynak bölümü;
<asp:Chart ID="Chart1" runat="server" DataSourceID="SqlDataSource1"
Height="700px" Width="700px">
<Legends>
<asp:Legend Name="Legend1" Enabled="false">
</asp:Legend>
<asp:Legend Name="Legend2" Font="Trebuchet MS,15px">
</asp:Legend>
</Legends>
<Series>
<asp:Series Name="Series1" ChartType="Pie" XValueMember="anket_secenekleri"
YValueMembers="anket_oylari" LabelForeColor="White" Label="#PERCENT{P1}"
Legend="Legend1" Font="Trebuchet MS, 14.25pt" >
</asp:Series>
<asp:Series Name="Series2" ChartType="Pie" XValueMember="anket_secenekleri"
YValueMembers="anket_oylari" LabelForeColor="White" Legend="Legend2" >
</asp:Series>
</Series>
<ChartAreas>
<asp:ChartArea Name="ChartArea1">
<Area3DStyle Enable3D="True" />
</asp:ChartArea>
</ChartAreas>
</asp:Chart>
Ve son olarak anketsonucun kod bloğuna;
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Session("Anketgör") <> "gör" Then
Response.Redirect("default.aspx")
End If
End Sub
İşte anketin görünümü;

Ve işte anket sonucunu gösteren chart nesnemiz.

Etiketler
Chart
Database
Veritabanı
Anket
Webforms
ip