Pythontr

husonet | Tarih: 27.09.2017

GridView Nedir?

C# ASP.NET GridView Özellikleri ile anlatımı

Merhabalar Arkadaşlar, (Not:Lütfen öneri ve sorularınızı yorum olarak atınız. Teşekkürler şimdiden)


GridView Nedir?


Gridview, verileri tablo şeklinde göstermeyi sağlayan özel bir kontroldür. Gridview sayesinde istediğimiz alanları kolay bir şekilde tablo halinde listeleyebiliriz. Bunun DataSource ile ilgili sorgusunu yazarak ilgili Gridview'i listeleyebiliriz.Ya da kod tarafından DataTable ile ilgili verileri DataBind ederek listenenmektedir. Bununla ilgili örnekler aşağıda sıralayacağım.


Datasource ile listeleme yöntemi


Bu kodu aspx kısmına yazarak ya da GridView'in 'property' kısmından datasource setlemesi yaparak ayarlanabilmektedir.



<asp:Panel>
<asp:GridView ID="grdStokRaporu" AllowPaging="true" PageSize="20" runat="server" DataSourceID="SqlDataSource" AutoGenerateColumns="False" BackColor="#CCCCCC" BorderColor="#258dbf" BorderStyle="Solid" ItemStyle-HorizantalAlignment="center" BorderWidth="3px" CellPadding="4" CellSpacing="2" ForeColor="#000000">
<Columns>
<asp:BoundField DataField="ALAN1" HeaderText="Alan 1" SortExpression="ALAN1" ItemStyle-Width="5%" />
<asp:BoundField DataField="ALAN2" HeaderText="Alan 2" SortExpression="ALAN2" ItemStyle-Width="1%" />
<asp:BoundField DataField="ALAN3" HeaderText="20" SortExpression="ALAN3" ItemStyle-Width="1%" />
<asp:BoundField DataField="ALAN4" HeaderText="40" SortExpression="ALAN4" ItemStyle-Width="1%" />
</Columns>
<FooterStyle BackColor="#0d4159" />
<HeaderStyle BackColor="#0d4159" Font-Bold="True" VerticalAlign="Bottom" ForeColor="White" />
<PagerStyle BackColor="#0d4159" ForeColor="White" VerticalAlign="Top" HorizontalAlign="Center" />
<RowStyle BackColor="White" HorizontalAlign="center" />
<SelectedRowStyle BackColor="#0d4159" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#0d4159" />
<SortedAscendingHeaderStyle BackColor="#0d4159" />
<SortedDescendingCellStyle BackColor="#0d4159" />
<SortedDescendingHeaderStyle BackColor="#0d4159" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>"
SelectCommand="
SELECT
TABLOADI.ALAN1,
TABLOADI.ALAN2,
TABLOADI.ALAN3,
TABLOADI.ALAN4
FROM TABLOADI
WHERE ID= @ID
and TABLOADI.SART1 >@SART1
and TABLOADI.SARTTARIH1 >= @SARTTARIH1
ORDER BY CONVERT(DATETIME,TABLOADI.SARTTARIH1, 105) DESC">
<SelectParameters>
<asp:QueryStringParameter DefaultValue="0" Name="SART1" QueryStringField="SART1" Type="Decimal" />
<asp:SessionParameter Name="ID" SessionField="SessionAdi" Type="Decimal" />
<asp:ControlParameter ControlID="edSarTarih1" Name="SARTTARIH1" PropertyName="Text" Type="DateTime" />
</SelectParameters>

</asp:SqlDataSource>
</asp:Panel>

DataBind ile listeleme yöntemi


Bu yöntemde aşağıdaki kodu aspx kısmında kullanıp DataBind kısmını C# tarafında yazmaktayız. C# kodlarını da fonksiyon örneği olarak aşağıda örnekleyeceğim.


aspx kısmı



<asp:Panel>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" PageSize="6"
AllowPaging="True" >
<Columns>
<asp:TemplateField HeaderText="Alan 1" ItemStyle-Width="150">
<ItemTemplate>
<asp:TextBox ID="TextBoxAdi" runat="server" Text='<%# Eval("Name") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="TextBox2Adi" HeaderText="Alan2" ItemStyle-Width="150px" />
<asp:TemplateField>
<ItemTemplate>
<asp:Button Text="Select" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Panel>

C# tarafı



protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
DatalariDoldur();
}
}
private void DatalariDoldur()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id"), new DataColumn("TextBoxAdi"), new DataColumn("TextBox2Adi") });
dt.Rows.Add(1, "A", "1");
dt.Rows.Add(2, "B", "2");
dt.Rows.Add(3, "C", "3");
dt.Rows.Add(4, "D", "4");
dt.Rows.Add(5, "E", "4");
dt.Rows.Add(6, "F", "5");
dt.Rows.Add(7, "G", "6");
dt.Rows.Add(8, "H", "7");
GridView1.DataSource = dt;
GridView1.DataBind();
}

GridView özellikleri


AllowPaging Özelliği


AllowPagging classı gridview de sayfalama için kullanılmaktadır. Bir sayfaya sığmayacak veriler varsa AllowPaging özelliği true yaparak sayfalayarak listeyebiliriz.PageSize özelliği ile ise bir sayfada kaç verinin bulunacağını belirtebiliriz.



<asp:GridView ID="GridView1" runat="server" PageSize="6" AllowPaging="True" >
<!-- Buraya alanlar eklenebilir -->
</asp:GridView>

OnPageIndexChanging Özelliği



OnPageIndexChanging özelliği, sayfalama yaptığımızda kullanabileceğimiz bir özelliktir. OnPageIndexChanging ile ikinci sayfaya geçtiğimizde ikinci sayfanın bind edilmesini sağlarız.



<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" PageSize="6"
AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging">
<!-- Buraya alanlar eklenebilir -->
</asp:GridView>


protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
DatalariDoldur(); //Dataların bind edildiği fonksiyon çağırılır.Yukarıda örneği bulunmaktadır.
}

OnRowCommand özelliği


OnRowCommand ile gridview'e buton ekleyerek butona OnClick özelliğini kazandırabiliriz.



<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowCommand="GridView1_RowCommand" PageSize="6"
AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging">
<!-- Buraya alanlar eklenebilir -->
</asp:GridView>


protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Select")
{
int rowIndex = Convert.ToInt32(e.CommandArgument);
ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Secilen index : " + rowIndex ');", true);
}
}

Hem OnRowCommand hem de OnPageIndexChanging özelliğini kullandığımızda diğer sayfada onClick özelliğinde yukarıdaki şekilde aşağıdaki hatayı vermektedir.


"An exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll but was not handled in user code"
"Additional information: Dizin aralık dışındaydı. Negatif bir değer olmamalı ve koleksiyonun boyutundan daha küçük olmalıdır."


Bu hatanın çözümü de aşağıdaki şekildedir.



protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Select")
{
int rowIndex = Convert.ToInt32(e.CommandArgument) % GridView1.PageSize;
ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Secilen index : " + rowIndex ');", true);
}
}

İyi çalışmalar.