FormView DataBound Event


Using the DataBound Event of the FormView control, we can customize the format of the data displayed in the FormView control. In this example, we will demonstrate how to format the data by choosing the example of displaying closing stock quantity in an italic font when the closing stock quantity is less than or equal to 0.

Steps:

Place the FormView control and set its ID property to FormView1. Configure the SqlDataSource control and bind the FormView to the SqlDataSource control. Create an ItemTemplate for the FormView and include the ItemID, ItemName,ItemType and ClStk fields, each in their corresponding Label controls.

Observe that the ItemTemplate contains four Label controls, ItemID, ItemName, ItemType and ClStk. In the statement <asp:Label ID="lblCode" Text='<%#Eval("ItemID")%>' runat="server" />, the code Text='<%#Eval("ItemID")%>' is referred to as the Databinding syntax for the field ItemID. The statement Text='<%#Eval("ItemID")%>' assigns the value of ItemID field to the Label control's Text property.

In the ItemTemplate, instead of using label controls, we can also use Static HTML text as shown below.
<%--<b>Item ID:</b>    <%#Eval("ItemID")%>		    <br /><br />
<b>Item Name:</b>      <%#Eval("ItemName")%>	    <br /><br />
<b>Item Type:</b>      <%#Eval("ItemType")%>	    <br /><br />
<b>Closing Stock:</b>  <%#Eval("ClStk")%>	        <br /><br />--%>


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FormViewDataBound.aspx.cs" 
Inherits="FormViewDataBound" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<style type="text/css">
 .changefont
{
    font-weight: bold;
    font-style: italic;
}
</style>
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:FormView ID="FormView1"  DataSourceID="MyDataSource"  
      DataKeyNames="ItemID"  AllowPaging="true" 
      OnDataBound="ItemsFormView_DataBound" runat="server">
       <ItemTemplate>
       <h3>Item Details</h3>
       <asp:Label ID="lblCode" Text='<%#Eval("ItemID")%>'  	    runat="server" /><br />
       <asp:Label ID="lblName" Text='<%#Eval("ItemName")%>'	    runat="server" /><br />
       <asp:Label ID="lblDescription" Text='<%#Eval("ItemType")%>' runat="server" /><br />
       <asp:Label ID="lblStock" Text='<%#Eval("ClStk")%>'  	    runat="server" /><br />

<%--<b>Item ID:</b>    <%#Eval("ItemID")%>		<br /><br />
<b>Item Name:</b>      <%#Eval("ItemName")%>	    <br /><br />
<b>Item Type:</b>      <%#Eval("ItemType")%>	    <br /><br />
<b>Closing Stock:</b>  <%#Eval("ClStk")%>	        <br /><br />--%>



<asp:LinkButton     id="lnkClose"   Text="Close"  Runat="server"/>      
<asp:LinkButton     id="lnkEdit"    Text="Edit"   
CommandName="Edit" Runat="server" />	 | 
<asp:LinkButton	    id="lnkNew"     Text="New Item"   
CommandName="New"  Runat="server" />
</ItemTemplate>
</asp:FormView>
<asp:SqlDataSource ID="MyDataSource"  
ConnectionString="<%$Connectionstrings:ERPConnectionString%>"
SelectCommand="SELECT ItemID,ItemName,ItemType,ClStk FROM ItemTable" 
runat="server"        />
</div>
</form>
</body>
</html>


To customize the format of data displayed by the FormView control, we access the value of the data in the DataBound Event Handler, by creating an event handler for the FormView's DataBound event. In the DataBound Event Handler, we access the label control - clstk and set the style property - text to italic.

Using FindControl() method in DataBound Event of the FormView control

To access a label control in an Itemtemplate, we use the FindControl("controlID") method as shown below. Label lbl = (Label)FormView1.FindControl("lblStock"); In the below code, the method FindControl returns a generic Control. To access the properties of the control, we need to cast to the Label control and modify Label control's style properties using CSS class property.

protected void ItemsFormView_DataBound(object sender, EventArgs e)
    {
       DataRowView dataRow = ((DataRowView)FormView1.DataItem);
        if (Convert.ToInt16(dataRow["ClStk"]) <= 0)
        {
            Label lbl = (Label)FormView1.FindControl("lblStock");
           	lbl.CssClass = "changefont";
     }

}


formview databound event

When this code is executed, the FormView control displays items whose closing stock quantity is less than or equal to 0, in an italic font. Observe that the FormView control does not contain any BoundFields and hence we cannot use the Rows collection.

Note that the below statement changes the fonts of all the fields of the formView control because the FormView control returns all fields in a single row.

FormView1.Row.Cells[0].CssClass = "changefont";