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="SqlDataSource1runat="server"

            ConnectionString="<%ConnectionStrings:anket%>"

            SelectCommand="SELECT * FROM [anket_tableWHERE ([anket_id] = @anket_id)">

            <SelectParameters>

                <asp:SessionParameter DefaultValue="0Name="anket_idSessionField="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 ObjectByVal 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 ObjectByVal 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 ObjectByVal 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 ObjectByVal 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
Mesaj Yaz