DataBinding Controls IT533 Lectures Installations Microsoft® SQL Server® 2008 Express Download the sample MDF files from the course’s web site CodeWeek3.zip. Attach them to the SQL Server Express. In SQL Server Management Studio, right click on Databases. Click Attach and then Add, select the MDF file. Data Binding How to Populate Server Controls? Specify the data in the control’s tags Not dynamic: can’t get data from a database Write code that uses the control’s object model This is okay if you need to populate a simple value or list, but quickly gets too complicated for populating sophisticated displays Data binding Create an object that holds the data (DataSet, Array, string, int, etc.) Associate that object with the control Data Binding What Is It? Provides a single simple yet powerful way to populate Web Form controls with data Enables clean separation of code from UI Supports binding to any data source Properties, expressions, method calls Collections (Array, Hashtable, etc.) DataSet, DataTable, DataView, DataReader XML One way snapshot model Requires code to reapply to data model Data Binding What Is It? Allows you to specify an expression When the appropriate DataBind method is called, the expression is evaluated and bound Page.DataBind DataBind for a single control (and subcontrols) Works for scalars, e.g. Label control Works for lists, e.g. DropDown control, ListBox control, etc. Enables the use of templates Data Binding Scalar Expressions Data binding expression: <%# expression %> Expression is evaluated when DataBind() is called <asp:Label id=label1 Text=<%# “The result is “ + (1 + 2) + “, the time is “ + DateTime.Now.ToLongTimeString() %> runat="server" /> public void Page_Load(object s, EventArgs e) { if (! Page.IsPostBack) Page.DataBind(); } Data Binding Scalar Expressions Demo: DataBinding1.aspx Data binding to simple, scalar expressions Data Binding Simple Lists Data binding can be used to populate list controls, e.g. <asp:ListBox> <asp:DropDownList> <asp:RadioButtonList> <asp:CheckBoxList> Data Binding Simple Lists Steps to data bind a list control Declare the list control Optionally set DataValueField and DataTextField Set its DataSource Call DataBind() method Data Binding Simple Lists Demo: DataBinding2.aspx Data binding to simple lists Introduction to ADO.NET .NET’s Database Framework A data-access technology that enables applications to connect to data stores and manipulate data contained in them in various ways . ADO.NET Architecture ADO.NET Core Objects Object Description Connection Establishes a connection to a specific data source. (Base class: DbConnection) Command Executes a command against a data source. Exposes Parameters and can execute within the scope of a Transaction from a Connection. (The base class: DbCommand) DataReader Reads a forward-only, read-only stream of data from a data source. (Base class: DbDataReader) DataAdapter Populates a DataSet and resolves updates with the data source. (Base class: DbDataAdapter) DataTable Has a collection of DataRows and DataColumns representing table data, used in disconnected model DataSet Represents a cache of data. Consists of a set of DataTables and relations among them Connected Data Access Model Disconnected Data Access Model Pros and Cons Connected Disconnected Database Resources - + Network Traffic - + Memory Usage + - Data Access - + Steps of Data Access: Disconnected Environment Defining the connection string Defining the connection Defining the command Defining the data adapter Creating a new DataSet object SELECT -> fill the dataset object with the result of the query through the data adapter Reading the records from the DataTables in the datasets using the DataRow and DataColumn objects UPDATE, INSERT or DELETE -> update the database through the data adapter Steps of Data Acces : Connected Environment Create connection Create command (select-insert-update-delete) Open connection If SELECT -> use a DataReader to fetch data If UDATE,DELETE, INSERT -> use command object’s methods Close connection Data Binding Data Source Example DataView GetSampleData() { DataSet ds; SqlConnection cxn; SqlDataAdapter adp; cxn = new SqlConnection("server=localhost; " + "uid=sa;pwd=;database=Northwind"); adp = new SqlDataAdapter( "select CategoryID, CategoryName from Categories", cxn); ds = new DataSet(); adp.Fill(ds, "Categories"); return ds.Tables["Categories"].DefaultView; // Work on the data in memory using the DataSet (ds) object } Data Binding Data Source Example // Databind the list box to a data reader SqlConnection cxn = new SqlConnection("Data Source=.\\SQLEXPRESS;database=Northwind; integrated security=true; Trusted_Connection=True"); SqlCommand cmd = new SqlCommand("select CategoryID, CategoryName from Categories", cxn); cxn.Open(); SqlDataReader dr = cmd.ExecuteReader(); CheckBoxList1.DataSource = dr; CheckBoxList1.DataValueField ="CategoryID"; CheckBoxList1.DataTextField="CategoryName"; CheckBoxList1.DataBind(); cxn.Close(); Data Binding Database Data binding can be used to populate server controls with data from a database Bind to a DataView of a DataSet Specify value and text with DataValueField and DataTextField, respectively Data Binding List Binding Examples void Page_Load(object s, EventArgs e) { ListBox1.DataSource = GetSampleData(); ListBox1.DataValueField = "CategoryID"; ListBox1.DataTextField = "CategoryName"; ListBox1.DataBind(); } <asp:ListBox id="ListBox1" runat="server" /> void Page_Load(object s, EventArgs e) { ListBox1.DataBind(); } <asp:ListBox id="ListBox1" runat="server" DataSource=<%# GetSampleData() %> DataValueField=“CategoryID” DataTextField=“CategoryName” /> Data Binding Binding to a Database Demo: DataBinding3.aspx Data binding to a database Choosing a DataReader or a Dataset The type of functionality application requires should be considered Use a DataSet to: Cache data locally in your application so that you can manipulate it Remote data between tiers or from an XML Web service Interact with data dynamically such as combining and relating data from multiple sources Perform extensive processing on data without requiring an open connection to the data source, which frees the connection to be used by other clients If readonly data is needed use DataReader to boost performance Best Practices Don’t create a new connection string for every code connecting to DB Use web.config file to keep your connection strings through the application scope <connectionStrings> <add name="NorthwindConnectionString" connectionString="Data Source=.\SQLEXPRESS; database=Northwind; integrated security=true; Trusted_Connection=True" providerName="System.Data.SqlClient" /> </connectionStrings> Use WebConfigurationManager.OpenWebConfiguration, ConnectionStringSettings to access settings at runtime. Let’s modify DataBinding3.aspx.cs You can keep any other variable to reach at runtime using this technique Data Binding GridView Full-featured list output Default look is a grid Columns can be formatted with templates AutoFormat is available Optional paging Updateable DataGrid vs GridView http://www.codeproject.com/KB/webforms/GridView _all_in_one.aspx Data Binding Binding to All Columns Binding all columns in the datasource Declare an <asp:GridView> Set its DataSource Call DataBind() void Page_Load(object s, EventArgs e) { myDataGrid.DataSource = GetEmployeeData (); myDataGrid.DataBind(); } <asp:GridView id=myDataGrid runat="server" /> Data Binding Binding to Specific Columns By default, GridView will display all columns To control columns to display: Set AutoGenerateColumns=“false” Specify Columns property Add column definition BoundField TemplateField (http://www.asp.net/learn/dataaccess/tutorial-12-cs.aspx) ButtonField, CheckBoxField HyperlinkField, ImageField CommandField (Edit, Select, Delete) Data Binding Binding to Specific Columns Binding to specific columns in the datasource Declare an <asp:GridView> Declare its Columns collection Set its DataSource Call its DataBind() method <asp:datagrid id=myDataGrid autogeneratecolumns=false runat=server> <Columns> <asp:BoundField DataField="fname" HeaderText="Name" /> <asp:BoundField DataField="lname" HeaderText="LastName" /> </Columns> </asp:datagrid> Data Binding GridView Paging Do this as an EXERCISE at home When there is too much data to display in one screen, a GridView can provide automatic paging Set AllowPaging=“true” Handle OnPageIndexChanged event Set page index Fetch data Re-bind data Handle OnPageIndexChanging event Data Binding Templates Templates provide a powerful way to customize the display of a server control Customize structure – not just style Can use controls or other HTML within a template 3rd party controls can expose new templates With data binding, templates specify a set of markup (HTML or server controls) for each bound piece of data Not just specifying formatting and style for a column However, templates are not limited to data binding No fixed set of templates Controls may define their own and expose any number of them Data Binding Templates Standard templates for list-bound controls HeaderTemplate: rendered once before all data bound rows ItemTemplate: rendered once for each row in the data source AlternatingItemTemplate: like ItemTemplate, but when present is used for every other row SeparatorTemplate: rendered between each row FooterTemplate: rendered once, after all data bound rows Data Binding Data Binding in Templates Templates need to access the bound data Container is an alias for the template’s containing control DataItem is an alias for the current row of the datasource DataBinder.Eval is a utility function provided to retrieve and format data within a template <%# DataBinder.Eval(Container.DataItem, "price", "$ {0}") %> Data Binding Repeater Control Provides simple output of a list of items No inherent visual form Templates provide the visual form No paging Can provide templates for separators Not updateable Data Binding Repeater Control <asp:Repeater id="repList" runat="server"> <template name="HeaderTemplate"> <table> <tr><td>Title</td><td>Type</td></tr> </template> <template name="ItemTemplate"> <tr> <td><%# DataBinder.Eval(Container.DataItem,"title_id") %></td> <td><%# DataBinder.Eval(Container.DataItem,"type") %></td> </tr> </template> <template name="FooterTemplate"> </table> </template> </asp:Repeater> Data Binding DataList Control Provides list output with editing Default look is a table Customized via templates Directional rendering (horizontal or vertical) Single and multiple selection Alternate item Updateable No paging Data Binding DataList Control void Page_Load(object s, EventArgs e) { myDataGrid.DataSource = GetSampleData(); myDataGrid.DataBind(); } <asp:datalist id=myDataList runat=server> <template name="itemtemplate"> <b>Title id:</b> <%# DataBinder.Eval(Container.DataItem, "title_id") %> <br> <b>Title:</b> <%# DataBinder.Eval(Container.DataItem, "title") %> </template> </asp:datalist> Data Binding Repeater and DataList Demo Demo: DataBinding6.aspx Using templates and data binding to a database with Repeater and DataList controls Data Binding Deciding When to Use the GridView, DataList or Repeater http://msdn.microsoft.com/en-us/library/aa479015.aspx http://www.dotnet- friends.com/fastcode/asp/fastcodeinasp140ee486-9653-4807-bf04aee4d5696991.aspx New ASP.NET 3.5 Data Binding Controls ListView and DataPager ASP.NET 3.5 introduces two new server-side data controls, the ListView and the DataPager. The ListView is highly customizable control for displaying data. You can define an assortment of templates such as ItemsTemplate, SelectedItemTemplate, ItemSeparatorTemplate, and GroupTemplate to customize how to display data. Includes styling with CSS, flexible pagination, and sorting, inserting, deleting, and updating features. 40 New ASP.NET 3.5 Data Binding Controls ListView and DataPager The DataPager control works alongside a data control, such as GridView or ListView, and customizes how it pages through data. With a data pager, you can customize the combination of page-navigation buttons (such as next, previous, or page numbers) that are displayed. 41 Newest DataBinding Control ListView Example that I learned from: http://www.codeproject.com/KB/webforms/CompleteListView.aspx Let’s do it: ListViewDataBinding.aspx