DataTable`ın Transpozunu Elde Etme
Transpoz, matrislerde karşımıza çıkan bir kavramdır. Bu yazıda DataTable'a uyarlamasını görebilirsiniz.
Matrislerde geçen bir kavramdır TRANSPOZ. (İng. transpose) Türkçe'mize çevirmek istersek; matrisin ters-çarprazı, transpozu, devriği, satır-sütun değiştirilmiş hali, vb. olabilir sanırım.
Aşağıda bir matrisin transpozunu elde etmeyi görüyorsunuz.
Kısaca satırları-sütunları yer değiştiriyoruz.
Aynı işlemi DataTable üzerinde uygulamaya ne dersiniz?
Bu işlem için bir extension method yazdım.
Kodu incelerseniz daha iyi anlayacaksınız.
Sayfamıza iki adet GridView ekleyelim:
<asp:GridView ID="gvNormal" runat="server" /> <asp:GridView ID="gvTranspoz" runat="server" />
Sonra da birincisine datatable'ı, ikincisine de bu datatable'ın transpozunu yükleyelim.
protected void Page_Load(object sender, EventArgs e) { var dt = DataTableHazirla(); gvNormal.DataSource = dt; gvNormal.DataBind(); gvTranspoz.DataSource = dt.ToTranspose(); gvTranspoz.DataBind(); } private DataTable DataTableHazirla() { DataTable dt = new DataTable(); dt.Columns.Add("Etkinlik_Türü", typeof(string)); dt.Columns.Add("Öğretmen", typeof(int)); dt.Columns.Add("Öğrenci", typeof(int)); dt.Columns.Add("Diğer", typeof(int)); var dr = dt.NewRow(); dr["Etkinlik_Türü"] = "Müze Gezisi"; dr["Öğretmen"] = 10; dr["Öğrenci"] = 15; dr["Diğer"] = 5; dt.Rows.Add(dr); dr = dt.NewRow(); dr["Etkinlik_Türü"] = "Üniversite Gezisi"; dr["Öğretmen"] = 3; dr["Öğrenci"] = 12; dr["Diğer"] = 4; dt.Rows.Add(dr); dr = dt.NewRow(); dr["Etkinlik_Türü"] = "Tiyatro Gezisi"; dr["Öğretmen"] = 5; dr["Öğrenci"] = 13; dr["Diğer"] = 2; dt.Rows.Add(dr); return dt; }
dt.ToTranspose() gayet kolay ve anlaşılır. :)
Şimdi de extension methodu göstereyim:
public static class Extensions { public static DataTable ToTranspose(this DataTable dt) { DataTable table = new DataTable(); table.Columns.Add(dt.Columns[0].ColumnName.ToString()); foreach (DataRow inRow in dt.Rows) { string col = inRow[0].ToString(); table.Columns.Add(col); } for (int i = 1; i <= dt.Columns.Count - 1; i++) { DataRow dr = table.NewRow(); dr[0] = dt.Columns[i].ColumnName.ToString(); for (int j = 0; j <= dt.Rows.Count - 1; j++) { string val = dt.Rows[j][i].ToString(); dr[j + 1] = val; } table.Rows.Add(dr); } return table; } }
İşte bu kadar.
Sonuç:
Etkinlik_Türü | Öğretmen | Öğrenci | Diğer |
---|---|---|---|
Müze Gezisi | 10 | 15 | 5 |
Üniversite Gezisi | 3 | 12 | 4 |
Tiyatro Gezisi | 5 | 13 | 2 |
Etkinlik_Türü | Müze Gezisi | Üniversite Gezisi | Tiyatro Gezisi |
---|---|---|---|
Öğretmen | 10 | 3 | 5 |
Öğrenci | 15 | 12 | 13 |
Diğer | 5 | 4 | 2 |
Kolay gelsin. :)
Projeyi buradan indirebilirsiniz.
Kaynaklar:
- https://tr.wikipedia.org/wiki/Ters%C3%A7apraz
- http://www.codeproject.com/Articles/44274/Transpose-a-DataTable-using-C
- http://www.istmem.com/Etkinlik-Detay.aspx :)
#DataTable #transpoz #matris #tersçarpraz