Evet yapılabilirmesela Xml ile çok güzel yapılabilir ki kendi sitemdede bu şekilde kullanıyorum.. Su sekilde yapabilirsiniz..
Şimdi öncelikle Xml Dosyamizi Hazirlicaz su sekilde
<anket="Emrealizmi Nasıl bilirsiniz ?">
<cevap text="Eh işte">0</cevap>
<cevap text="Çok İyi">44</cevap>
</anket>
// Torpil geçelim kendimize :P
Neyse Simdide anketr.Aspx Dosyamızı su sekilde ypıcaz
<asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0">
<asp:View ID="View1" runat="server">
<table>
<tr>
<td id="header">
ANKET
</td>
</tr>
<tr>
<td id="head">
<asp:Label ID="lblHead" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td>
<asp:RadioButtonList ID="rbQ" runat="server" Width="95%">
</asp:RadioButtonList>
</td>
</tr>
<tr>
<td id="footer">
<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="Oy Ver" />
<asp:Button ID="btnResults" runat="server" OnClick="btnResults_Click" Text="Sonuçlar" />
</td>
</tr>
</table>
</asp:View>
<asp:View ID="View2" runat="server">
<asp:Xml ID="Xml1" runat="server" DocumentSource="~/App_Data/anket.xml" TransformSource="~/App_Data/anket.xsl"></asp:Xml>
<asp:ImageButton ID="imgBack" runat="server" ImageUrl="~/images/back.gif" OnClick="imgBack_Click"
ToolTip="geri dön" />
</asp:View>
</asp:MultiView>Simdide Anket.aspx.Cs Dosyamizi yazalım...
Uygulama ilk çağrıldığında (web formu ilk yüklendiğinde) LinqToXml kullanarak Xml dosyasından verileri elde ediyoruz.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
anketyap();
}
void anketyap()
{
string path = Server.MapPath(@"App_Data/anket.xml");
//xml verisi
XDocument myXml = XDocument.Load(path);
//Anket-> cevap @text
lblHead.Text = myXml.Element("Anket").Attribute("name").Value;
//cevaplar
foreach (var att in myXml.Element("Anket").Elements("cevap"))
rbQ.Items.Add(att.Attribute("text").Value);
}
XDocument ile dosyayı hafızaya yükledikten sonra sırayla;
- Anket başlığını Label kontrolünün Text özelliğine,
- Soruları da adedi kadar RadioButtonList kontrolüne Item (eleman) olarak ekliyoruz.
protected void btnSubmit_Click(object sender, EventArgs e)
{
if (rbQ.SelectedValue != string.Empty)
{
string path = Server.MapPath(@"App_Data/anket.xml");
//xml verisi
XDocument myXml = XDocument.Load(path);
//oy sonuçlar
//(Descendants direk olarak cevap node' una ulaşır)../cevap @text = value | string
int value = Convert.ToInt32(myXml
.Descendants("cevap")
.Where(
n => ((string)n.Attribute("text").Value == rbQ.SelectedValue)
).Single().Value
);
//değeri 1 arttırılıyor
value++;
//yeni değer atanıyor
//../cevap @text = value | string
myXml.Descendants("cevap")
.Single(
n => ((string)n.Attribute("text").Value == rbQ.SelectedValue)
).Value = value.ToString();
//xml verisi kaydediliyor
myXml.Save(path);
}
}Anketin oylama kısmında ise seçilen soruya ait node' un değerini 1 arttırıyoruz. Bu işlemi yapmak için RadioButtonList kontrolünden seçili Item' ın değerini ait özelliğe göre sorgu yapıp ilgili değeri alıyoruz. Sonrasında ise Xml verisini tekrar kaydediyoruz.
Gelelim Anket Sonuclarina
Nerede bir xml orada bir xslt mantığı ile verileri istediğimiz formatta gösteriyoruz.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
<xsl:template match="/">
<xsl:variable name="summ" select="sum(Anket/cevap)"></xsl:variable>
<table>
<tr>
<td id="header" colspan="3">ANKET SONUÇLARI</td>
</tr>
<tr>
<td id="head" colspan="3">
<xsl:value-of select="anket/@name"/>
</td>
</tr>
<xsl:for-each select="anket/cevap">
<tr>
<td width="120">
<xsl:value-of select="@text"/>
</td>
<td id="value">
%<xsl:value-of select="format-number(. * 100 div $summ,'0')"/>
</td>
<td width="100">
<xsl:variable name="innerSumm" select=". * 100 div $summ"></xsl:variable>
<img src="images/bar.png" height="10" width="{$innerSumm}%" />
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
Burada ki en önemli kısım şüphesiz ki oy yüzdesinin hesaplanması olcaktır...
%<xsl:value-of select="format-number(. * 100 div $summ,'0')"/>
ve yüzdeye göre anket resminin uzunluğunun belirlenmesi. Graifik şeklinde olan
<xsl:variable name="innerSumm" select=". * 100 div $summ"></xsl:variable>
<img src="images/bar.png" height="10" width="{$innerSumm}%" />
Kolay Gelsin Eğer herhangi bir sorun olursa burada yazabilirsin...