.Net Denemeleri

Repeater İle Satır Taşıma

Repeater ile verileri listemek yada sıralamaksort mümkün. Peki sıralamasını manuel nasıl yaparız?

Bunu gerçekleştirmek için taşıma yapmak istediğimiz tablomuza RowNumber adlı bir kolonfield ekliyoruz. Bu kolondaki değer verinin sıra numarasını temsil edecek. Taşıma işlemi ise bu numaraları değiştirmekten ibaret olacaktır.

Table

Repeater içine sıralama olayını gerçekleştirmek için iki adet ImageButton kontrolü ekliyoruz. CommandArgument özelliğineproperty taşınacak satırın Id değerini atıyoruzset. CommandName özelliğine atanan up ve down değerleri ile de taşıma yönünü bildiriyoruz.

<td style="width: 24px; text-align: center;">
    <asp:ImageButton runat="server"
                        ID="moveup"
                        ImageUrl="~/Images/up.png"
                        ToolTip="Yukarı Taşı"
                        CommandArgument='<%# Eval("Id")%>' 
                        CommandName="up" />
</td>
<td style="width: 24px; text-align: center;">
    <asp:ImageButton runat="server"
                        ID="movedown" 
                        ImageUrl="~/Images/down.png" 
                        ToolTip="Aşağı Taşı"
                        CommandArgument='<%# Eval("Id")%>' 
                        CommandName="down" />
</td>

Repeater kontrolünün ItemCommand olayıevent na aşağıdaki kodları yazarak taşıma işlemini gerçekleştiriyoruz.

using (NorthwindDataContext db = new NorthwindDataContext())
{
    //taşınacak verinin Id bilgisi alınıyor
    Guid Id = new Guid(e.CommandArgument.ToString());
    //taşınacak veri
    OrderedProduct moveproduct = db.
                                    OrderedProducts.
                                    FirstOrDefault(p => p.Id == Id);
    //yeni numara hesapla
    int RowNumber = e.CommandName == "up" ? 
                    moveproduct.RowNumber - 1 : //yukarı ise
                    moveproduct.RowNumber + 1; //aşağı ise
    //yeri değişecek veri
    OrderedProduct targetproduct = db.
                                    OrderedProducts.
                                    FirstOrDefault(p => p.RowNumber == RowNumber);
    if (e.CommandName == "up")
    {
        //yukarı taşı
        moveproduct.RowNumber -= 1;
        targetproduct.RowNumber += 1;
    }
    else if (e.CommandName == "down")
    {
        //aşağo taşı
        moveproduct.RowNumber += 1;
        targetproduct.RowNumber -= 1;
    }
    //değişiklikleri yap
    db.SubmitChanges();
}
//tekrar listele
BindData();

Daha sonra ise, ilk satırdaki Yukarı Ok u ve en alt satırdaki Aşağı Ok ImageButton'larını basit bir script kodu ile kaldırıyoruz. Bu kod sayesinde sunucuserver tarafındaki ilk kayıt mı son kayıt mı kontrolünü yapmaktan yırtıyoruz :)

<script src="Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $("table tbody tr:first td:eq(3)").empty();
        $("table tbody tr:last td:eq(4)").empty();
    });
</script>

Repeater kontrolü renderHtml koduna dönüşmek edildiğinde aşağıdaki görüntü oluşacaktır. Kullanıcı yukarı aşağı ok tuşları ile satırları manuel olarak sıralayabilecek.

Grid

Projeyi indir.

22 Şubat Salı, 2011 | Ado.Net Asp.net Linq

Linq İle Pivot

Pivot hazırlamak benim için hep eziyet olmuştur (Sql ile).  Lakin Linq ile çok daha basitmiş onu kavradım :)

Şöyleki;
Diagramda görüldüğü gibi bir yapı olsun. Yazılar ve Kategoriler adlı iki adet ana tablo ve bunları bağlayan bir adet yardımcı tablo.

Diagram

Amacımız;
Kategori bazında 2010 yılında aylık kaç adet yazı yayınlanmış onu bulmak ve listelemek.

from p in db.EntryCategories
where p.Entry.EntryTime.Year == 2010
group p by p.Category.CategoryName into g
select new
{
    Kategori = g.Key,
    Ocak = g.Where(t => t.Entry.EntryTime.Month == 1).Count(),
    Şubat = g.Where(t => t.Entry.EntryTime.Month == 2).Count(),
    Mart = g.Where(t => t.Entry.EntryTime.Month == 3).Count(),
    Nisan = g.Where(t => t.Entry.EntryTime.Month == 4).Count(),
    Mayıs = g.Where(t => t.Entry.EntryTime.Month == 5).Count(),
    Haziran = g.Where(t => t.Entry.EntryTime.Month == 6).Count(),
    Temmuz = g.Where(t => t.Entry.EntryTime.Month == 7).Count(),
    Ağustos = g.Where(t => t.Entry.EntryTime.Month == 8).Count(),
    Eylül = g.Where(t => t.Entry.EntryTime.Month == 9).Count(),
    Ekim = g.Where(t => t.Entry.EntryTime.Month == 10).Count(),
    Kasım = g.Where(t => t.Entry.EntryTime.Month == 11).Count(),
    Aralık = g.Where(t => t.Entry.EntryTime.Month == 12).Count(),
};

Sonuç;
Table

31 Ocak Pazartesi, 2011 | Linq

ListView (Web) ile Gruplamak

Çok yakın ve kadim bir dostum için araştırırken farkettim ve paylaşmak istedim.
ListView kontrolü içinde ki verileri gruplayarak göstermek. DataList kontrolündeki RepeatColums özelliğini kullanmak gibi fakat birazcık farklı :)

Div etiketleriyle Listview'e şablon hazırlamak yeterli.

<asp:ListView ID="Listview1" runat="server" GroupltemCount="S" EnableViewState="false">
    <ItemTemplate>
        <div style="width: 200px;
                    float: left; 
                    font-family: Verdana;
                    font-size: l0px; 
                    margin-bottom: l0px;">
            <asp:Image ID="Imagel" 
                        runat="server" 
                        ImageUrl='<%# "image.aspx?path=" + Eval("FullName") %>' />
            <br />
            <strong>Dosya Adi:</strong>
            <%# Eval("Name")%>
            <br />
            <strong>Uzunluk: </strong>
            <%# Eval("Length")%>
            <br />
            <strong>Özellikler : </strong>
            <%# Eval("Attributes")%>
        </div>
    </ItemTemplate>
    <LayoutTemplate>
        <div id="groupPlaceholderContainer" runat="server">
            <div id="groupPlaceholder" runat="server">
            </div>
        </div>
    </LayoutTemplate>
    <GroupTemplate>
        <div id="itemplaceholdertontainer" runat="server" style="width: l000px;">
            <div id="itemPlaceholder" runat="server">
            </div>
        </div>
    </GroupTemplate>
</asp:ListView>

Veri kaynağı için basit ve hızlı bir çözüm, dosyalar.

Listview1.DataSource = from file in new DirectoryInfo("C:\\windows").GetFiles()
                        orderby file.Name
                        select new
                        {
                            file.Name,
                            file.Length,
                            file.FullName,
                            file.Attributes
                        };
Listview1.DataBind();

Dosyaları biraz süslü gösterelim.

string path = Request["path"];
Icon ico = Icon.ExtractAssociatedIcon(path);
Bitmap bmp = new Bitmap(ico.Width, ico.Height);
Graphics g = Graphics.FromImage(bmp);
g.DrawIcon(ico, new Rectangle(0, 0, ico.Width, ico.Height));
bmp.Save(Response.OutputStream, ImageFormat.Png);
g.Dispose();
bmp.Dispose();
ico.Dispose();

Sonuç;

ListView 

14 Nisan Salı, 2009 | Asp.net C# Linq Html

Veritabanından Xml'e Dönüştürmece

Şöyle bir düşündüğümüzde veritabınında bulunan herhangi bir tablonun verilerini Xml formatında dosyaya yazmanın kaç yolu vardır acaba? Sabahları genelde işe erken gelirim, 1.5 saat kadar :).
Oturdum bir kaç örnek yaptım, paylaşıyorum tüm dünya ile. (Özgüvenin tavan yaptığı an)

Aklıma gelen ilk yöntem DataTable nesnesini kullanmak. Bu nesneyi sadece yazmak için kullanmak kaynak tüketimi açısından çok iyi bir seçim olmaz fakat kullanım kolaylığı açısında tercih edilebilir.

DataBase 2 Xml
 

Diğer bir yöntem ise henüz Veri KatmanındaDataLayer iken oracıkta Xml formatına dönüştürüp XmlTextWriter ile cayır cayır yazmak.

DataBase 2 Xml

Son yöntem ise daha önce şu yazıda kullandığım teknik ile (attributenitelik yerine bu sefer nodedüğüm kullandım) XDocument ile manuel olarak Xml dosyasını oluşturmak. Sanırım en zoru bu. Yanlış anlaşılmasın benim için kolay da hani ilk yapan için diyorum :)

DataBase 2 Xml

20 Kasım Perşembe, 2008 | Asp.net C# Xml Linq Ado.Net Sql

IP Address

Yerel Pc' nin Versiyon 4 Ip adresini almak.

ip address

2 Şubat Cumartesi, 2008 | C# Linq

Linq 2 Xml ve Treeview

LinqToXml ile Xml dosyası oluşturup Treeview kontrolü ile gösterelim;

linq2xml

linq2xml

 

8 Ocak Salı, 2008 | Asp.net C# Linq