asp.net ile anket yapımı (2. bölüm)

 

Merhabalar .
Bu yazıda anket  örneğimizin ikinci bölümüne  devam ediyor olacağız. Yazının birinci bölümünde anket eklemeyi yapmıştık, şimdi ise eklene anketi sayfada gösterip ziyaretçilere oy kullandıracağız. Oy kullandıktan sonra anket sonuçlarını rakamsal ve grafiksel olarak sayfamızda göstereceğiz. Hemen sayfa tasarımını yapalım html kodu aşağıdaki gibi

Sayfamızın adı AnketGoster.aspx

<asp:PlaceHolder runat="server" ID="PhAnket">

  <center> <h2><En Gerçekçi Anket</h2></center>

   <table align="center" cellpadding="2" style="width: 500px; font-family: Arial; font-size: 12px; font-weight: bold; color: #3366CC;">

            <tr>

                <td>

                    <asp:Label ID="lblAnketSoru" runat="server"></asp:Label>

                </td>

            </tr>

            <tr>

                <td>

                    <asp:RadioButtonList ID="rdCevaplar" runat="server">

                    </asp:RadioButtonList>

                </td>

            </tr>

            <tr>

                <td>

                    <asp:Button ID="btnOyVer" runat="server" BorderStyle="Dotted"

                        onclick="btnOyVer_Click" Text="Oy Ver" />

                        <asp:Label ID="lbldurum" runat="server"></asp:Label>

                </td>

            </tr>

        </table>

  

   </asp:PlaceHolder>

   <center>    <asp:Button ID="btnsonucGoster" runat="server" Text="Sonuçlar"  onclick="btnsonucGoster_Click" /></center>

      

       

       

<asp:PlaceHolder Visible=false ID="PhSonuclar" runat="server">

  <table align="center" cellpadding="2" style="width: 500px">

            <tr>

                <td>

                    <asp:Label ID="lblAnketSoru_2" runat="server"></asp:Label>

                 

                </td>

            </tr>

            <tr>

                <td>

               

                <table cellpadding="2" cellspacing="2" border="0">

                   <asp:Repeater runat="server" ID="RpAnketSonuclari"

                        onitemdatabound="RpAnketSonuclari_ItemDataBound">

                   <ItemTemplate>

                 <tr style="font-family: Arial; font-size: 12px; color: #336699; font-weight: bold;">

                

                 <td>  <%# Eval("Cevap") %> &nbsp; </td>

                 <td>

                    <asp:Image ID="imgBar" ImageUrl="~/bar.gif" runat="server" />

                   <asp:Label id="lblOran" runat="server"></asp:Label>

                   </td>

                 <td>( <%# Eval("Hit") %>  Kişi )</td>

                

                

                 </tr>

                   </ItemTemplate>

                   </asp:Repeater>

                   <tr><td colspan="3"> Toplam :<asp:Literal runat="server" ID="ltToplam"></asp:Literal> Kişi </td></tr>

                   </table>

                  

                </td>

            </tr>

            <tr>

                <td>

                   

                </td>

            </tr>

        </table>

</asp:PlaceHolder>

 

Şimidi de sayfamızın kodlarına geçelim.

 

using System;

using System.Collections;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

using System.Data.OleDb;

 

public partial class AnketGoster : System.Web.UI.Page

{

    OleDbConnection cnn = new OleDbConnection("Provider=microsoft.jet.oledb.4.0; data source=" + HttpContext.Current.Server.MapPath("~/App_Data/anket.mdb") + "");

   public int toplamOy=0;//toplan değişkenimiz public tanımlıyoruz

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            AnketGetir();//sayfa ilk yüklendiğinde anketi çaığırıyoruz

        }

 

 

 

 

    }

 

    private void AnketGetir()

    {

 

   int anket_id=19;//ben manuel olarak anetin soru nosunu veridm istenirse DB den alınabilir ...

        //sql kodumuz anket ve cevap tabloalrınından veirleri getiriyor.

        string sql = "SELECT AnketCevap.AnketID, AnketSoru.Soru, AnketCevap.CevapID, AnketCevap.Hit,AnketCevap.Cevap " +

                         "FROM AnketCevap INNER JOIN AnketSoru ON AnketCevap.AnketID = AnketSoru.AnketID where AnketSoru.AnketID = "+anket_id+"";

              OleDbDataAdapter da = new OleDbDataAdapter(sql, cnn);

 

            DataTable dt = new DataTable("anket");

            da.Fill(dt);

            lblAnketSoru.Text = dt.Rows[0]["Soru"].ToString();//anketin sorusunu label e yazdırdık.

            ViewState["AnketID"] = dt.Rows[0]["AnketID"].ToString();//Anketin değerini ViewStatede tuttum ben.

            rdCevaplar.DataSource = dt.DefaultView;//anket sorularını radiobutonliste doldurduk.

            rdCevaplar.DataTextField = "Cevap";

            rdCevaplar.DataValueField = "CevapID";

            rdCevaplar.DataBind();

        }

    protected void btnOyVer_Click(object sender, EventArgs e)

    {

        if (Session["kullanma"] != null)

        {

            lbldurum.Text = "Daha önce oy kullanıdın !";

            return;

        }

 

        int secim =Convert.ToInt32(rdCevaplar.SelectedValue);

        cnn.Open();

        //sql kod ile seçilenin takımın Hit değerini 1 artırıyoruz

        OleDbCommand cmd = new OleDbCommand("UPDATE AnketCevap SET Hit=Hit+1 Where CevapID="+secim+" and  AnketID = " + Convert.ToInt32(ViewState["AnketID"]) + "", cnn);

        cmd.ExecuteNonQuery();

        cnn.Close();

        Session["kullanma"] = "evet";

        lbldurum.Text = "Teşekkürler...";

        Sonuclar();

 

 

    }

    protected void btnsonucGoster_Click(object sender, EventArgs e)

    {

        Sonuclar();

    }

 

    private void Sonuclar()

    {

        PhSonuclar.Visible = true;

        int anket_id = 19;//ben manuel olarak anetin soru nosunu veridm istenirse DB den alınabilir ...

        //sql kodumuz anket ve cevap tabloalrınından veirleri getiriyor.

        cnn.Open();

        OleDbCommand cmd = new OleDbCommand("Select SUM(Hit) FROM AnketCevap where AnketID=" + anket_id + "", cnn);

        ltToplam.Text =(cmd.ExecuteScalar()).ToString();//toplam oy u alıyoruz

        toplamOy =Convert.ToInt32( ltToplam.Text);

        cmd.Dispose();

 

        string sql = "SELECT AnketCevap.AnketID, AnketSoru.Soru, AnketCevap.CevapID, AnketCevap.Hit,AnketCevap.Cevap " +

                         "FROM AnketCevap INNER JOIN AnketSoru ON AnketCevap.AnketID = AnketSoru.AnketID where AnketSoru.AnketID = " + anket_id + " order by AnketCevap.Hit desc";

        OleDbDataAdapter da = new OleDbDataAdapter(sql, cnn);

 

        DataTable dt = new DataTable("anket");

        da.Fill(dt);

        lblAnketSoru.Text = dt.Rows[0]["Soru"].ToString();//anketin sorusunu label e yazdırdık.

        ViewState["AnketID"] = dt.Rows[0]["AnketID"].ToString();//Anketin değerini ViewStatede tuttum ben.

 

        RpAnketSonuclari.DataSource = dt.DefaultView;//anket sorularını radiobutonliste doldurduk.

 

        RpAnketSonuclari.DataBind();

    }

    protected void RpAnketSonuclari_ItemDataBound(object sender, RepeaterItemEventArgs e)

    {

        // burada her seçeneğin toplam oylara olan oaranı gösterip ekrana oy oranını ve bu oranla oranla orantılı

        //olarak bar resmimizi genişiliğini değiştiriyoruz

        double hit =Convert.ToDouble(DataBinder.Eval(e.Item.DataItem, "Hit"));// o andaki kaydın hit değeri

        Label lOran = (Label)e.Item.FindControl("lblOran");//oranı yazdıracığım label i alıyoruz

        double oran =Convert.ToDouble((hit * 100) / toplamOy ); // oran hesaplatıyoruz.

 

        lOran.Text =" % "+ Convert.ToString(Math.Round(oran,1));//oranı label e yazdırıyoruz

       Image bar = (Image)e.Item.FindControl("imgBar");//resim nesnemizinde bir örneğini alıyoruz

       bar.Height =10;//resimin yüksekliğini veriyoruz

        try

        {

            bar.Width = Convert.ToInt32(oran);// resmin genişkiği olarak oranı veriyoruz

 

        }

        catch

        {

            bar.Width = 0;

 

        }

 

 

    }

}

 

 

Görüşmek üzere .

 


Bunu beğen
Paylaş

Yorumlar
Yorum Yaz
İsim : (*)
E-mail :
Web Adresi:
:
(*)
 
Kapat