private int TestID;
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GetAktifTest(); GetTestSorulari(); } }
private void GetAktifTest() { SqlConnection con = new SqlConnection("ConnectionString..."); //Başlangıç tarihinden Büyük, Bitiş tarihinden küçük geçerli testi buluyoruz //Mantıken bir tane kayıt geri dönmeli, eğer birden fazla kayıt dönerse //ilk değeri almış oluruz. Bu yüzden test eklerken tarihlere dikkat etmelisiniz! SqlCommand com = new SqlCommand("Select * From Testler Where BaslangicTarihi < GetDate() and BitisTarihi > GetDate()", con); SqlDataReader dr; con.Open(); dr = com.ExecuteReader(); if (dr.HasRows) { dr.Read(); //Geçerli testin ID'sini alıyoruz, bu değere göre biraz sonra soruları dolduracağız... //Değişken global tanımlı diğer methodlardada kullanacağız... TestID = Convert.ToInt32(dr["TestID"].ToString()); dr.Close(); } else { //Geçerli testin bulunmadığı blok... Response.Redirect("blabla...aspx"); } con.Close(); }
private void GetTestSorulari() { SqlConnection con = new SqlConnection("ConnectionString..."); //Teste ait soruları çekiyoruz SqlDataAdapter da = new SqlDataAdapter("Select * From TestSorulari Where TestID=@TestID", con); da.SelectCommand.Parameters.AddWithValue("@TestID", TestID); DataTable dt = new DataTable(); da.Fill(dt); rptTest.DataSource = dt; //Soruları Repeatırımıza eşitledikten sonra ItemDatabound eventında //Seçenekleri oluşturmaya başlayacağız... rptTest.DataBind(); }
private DataTable GetSoruSecenekleri(int TestSoruID) { SqlConnection con = new SqlConnection("ConnectionString..."); //Soruya göre seçeneklerini yüklüyoruz... SqlDataAdapter da = new SqlDataAdapter("Select SoruSecenekID, Baslik From SoruSecenekleri Where TestSoruID=@TestSoruID", con); da.SelectCommand.Parameters.AddWithValue("@TestSoruID", TestSoruID); DataTable dt = new DataTable(); da.Fill(dt); return dt; }
protected void rptTest_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { //Databind() eventından sonra eşitlediğimiz değerlere erişiyoruz int TestSoruID = Convert.ToInt32((e.Item.FindControl("TestSoruID") as HiddenField).Value); //Makalede söylediğimiz gibi SoruTipi'ni hangi controle seçenekleri //yükleyeceğimizi kontrol edeceğiz... string SoruTipi = (e.Item.FindControl("SoruTipi") as HiddenField).Value; if (SoruTipi == "RadioButtonList") { //Item içindeki RadioButtonListi kontrolünü buluyoruz RadioButtonList rbl = e.Item.FindControl("rbl") as RadioButtonList; //Bulduğumuz controle seçenekleri yüklüyoruz... rbl.DataSource = GetSoruSecenekleri(TestSoruID); rbl.DataTextField = "Baslik"; rbl.DataValueField = "SoruSecenekID"; rbl.DataBind(); //Daha önce yaratılan ancak gizli olan RadioButtonListimizi gösteriyoruz... rbl.Visible = true; } else if (SoruTipi == "TextBox") { //Item içindeki TextBox kontrolünü buluyoruz TextBox txt = e.Item.FindControl("txt") as TextBox; //Daha önce yaratılan ancak gizli olan TextBoxımızı gösteriyoruz... txt.Visible = true; } } }
protected void Button1_Click(object sender, EventArgs e) { //Bu kısımda Repeater içinde oluşturulan sorular içinde dönüyoruz foreach (RepeaterItem RI in rptTest.Items) { //DataBound işleminde yaptığımız gibi Soru bilgilerine erişiyoruz... int TestSoruID = Convert.ToInt32((RI.FindControl("TestSoruID") as HiddenField).Value); string SoruTipi = (RI.FindControl("SoruTipi") as HiddenField).Value; //Aynı şekilde soru tipine göre cevaba nasıl erişeceğimizi belirliyoruz //Ör. Bu kısımda CheckBoxList kullanmış olsaydık kontrolü bulduktan sonra //onun içindede dönüp seçili olanları bulup kayıt işlemini gerçekleştirecektik... if (SoruTipi == "RadioButtonList") { RadioButtonList rbl = RI.FindControl("rbl") as RadioButtonList; //Eğer seçili bir değer varsa bunu rbl.SelectedValue ile alıp //Veritabanımızdaki TestCevaplari tablosundaki SoruSecenekID kolonuna yazacağız. if (rbl.SelectedIndex != -1) { int SoruSecenekID = Convert.ToInt32(rbl.SelectedValue); Oyla(TestSoruID, SoruSecenekID, "", "1"); } //Boş ise değer göndermiyoruz... else { Oyla(TestSoruID, 0, "", "1"); } } else if (SoruTipi == "TextBox") { //RadioButtonList'deki gibi aynı kontrolleri yapıp cevaplama işlemini gerçekleştiriyoruz. TextBox txt = RI.FindControl("txt") as TextBox; if (!String.IsNullOrEmpty(txt.Text)) { string SoruText = txt.Text; //Ancak bu kısımda SoruText alanına kayıt yapıyoruz... Oyla(TestSoruID, 0, SoruText, "1"); } else { Oyla(TestSoruID, 0, "", "1"); } } } }
private void Oyla(int TestSoruID, int SoruSecenekID, string SoruText, string UserID) { SqlConnection con = new SqlConnection("ConnectionString..."); //Gelen değerleri veritabnımıza kayıt ediyoruz... SqlCommand com = new SqlCommand("INSERT TestCevaplari VALUES(@TestSoruID, @SoruSecenekID, @SoruText, @UserID, GetDate())", con); com.Parameters.AddWithValue("@TestSoruID", TestSoruID); if (SoruSecenekID > 0) { com.Parameters.AddWithValue("@SoruSecenekID", SoruSecenekID); } else { com.Parameters.AddWithValue("@SoruSecenekID", DBNull.Value); } if (!String.IsNullOrEmpty(SoruText)) { com.Parameters.AddWithValue("@SoruText", SoruText); } else { com.Parameters.AddWithValue("@SoruText", DBNull.Value); } com.Parameters.AddWithValue("@UserID", UserID); con.Open(); com.ExecuteNonQuery(); con.Close(); }
protected void lnkTemizle_Click(object sender, EventArgs e) { //Bu kısmı seçtiğimiz değerleri temizlemek için kullanacağız //Repeater içinden gelen Butonu yakalıyoruz... LinkButton lnkTemizle = (LinkButton)sender; //Hangi Itemdan geldiğini buluyoruz... RepeaterItem RI = (RepeaterItem)lnkTemizle.NamingContainer; //Yine aynı şekilde DataBound ve Oylama işlemindeki gibi SoruTipine göre //kontrolü yakalayıp seçili yada yazılı değerleri siliyoruz... string SoruTipi = (RI.FindControl("SoruTipi") as HiddenField).Value; if (SoruTipi == "RadioButtonList") { RadioButtonList rbl = RI.FindControl("rbl") as RadioButtonList; rbl.SelectedIndex = -1; } else if (SoruTipi == "TextBox") { TextBox txt = RI.FindControl("txt") as TextBox; txt.Text = ""; } } |