Introduction:
In this article I will demonstrate
the few uses of the ObjectDataSource. This is a two part article series. In the
first part I will demonstrate some of the cool uses of the ObjectDataSource
control. In the next article I will discuss Ugly part of the ObjectDataSource
control. The article is also accompanied with code (C# only) which can be
downloaded.
What is ObjectDataSource
Control?
ObjectDataSource control allows
you to bind your objects to a control on the form. These controls can be any web
server controls. Mainly ObjectDataSource control is used to bind to the GridView
and DetailsView control.
Displaying Data:
One of the good feature about
ObjectDataSource control is that you can quickly bind a control to it without
writing any code for the binding operation. Let's see a quick example. Suppose I
have a Customer class which contains a method GetAllCustomers() which, returns
all the customers to the presentation layer.
|
public
static
List<Customer>
GetAllCustomers() {
SqlConnection myConnection =
new
SqlConnection(ConnectionString);
SqlCommand
myCommand = new
SqlCommand("SELECT
LastName,FirstName FROM Customers",
myConnection);
List<Customer>
customerList = new
List<Customer>();
SqlDataReader reader =
null;
myConnection.Open();
reader = myCommand.ExecuteReader();
while
(reader.Read())
{
Customer
customer = new
Customer((string)reader["FirstName"],
(string)reader["LastName"]);
customerList.Add(customer);
}
return
customerList;
}
|
Now if you wish to bind the
customerList to the presentation layer you can simply use:
| <asp:ObjectDataSource
ID="CustomerData"
SelectMethod="GetAllCustomers"
TypeName
=
"AzamSharp.Testing.BusinessLogic.Customer"
runat="server"> |
And the GridView HTML Code will look something
like this:
|
<asp:GridView
ID="GridView1"
DataSourceID="CustomerData"
EmptyDataText="No
data available"
runat="server"
BackColor="White"
BorderColor="#3366CC"
BorderStyle="None"
BorderWidth="1px"
CellPadding="4"
Font-Bold="False"
Font-Size="11pt"
Font-Underline="False"
AutoGenerateColumns="False"
ShowFooter="True">
<FooterStyle
BackColor="#99CCCC"
ForeColor="#003399"
/>
<RowStyle
BackColor="White"
ForeColor="#003399"
/>
<SelectedRowStyle
BackColor="#009999"
Font-Bold="True"
ForeColor="#CCFF99"
/>
<PagerStyle
BackColor="#99CCCC"
ForeColor="#003399"
HorizontalAlign="Left"
/>
<HeaderStyle
BackColor="#003399"
Font-Bold="True"
ForeColor="#CCCCFF"
/>
<Columns>
<asp:BoundField
DataField="LastName"
HeaderText="LastName"
/>
<asp:BoundField
DataField="FirstName"
HeaderText="FirstName"
/>
</Columns>
</asp:GridView> |
Now, when you display your GridView control
your GridView will be populated.
Inserting Data using ObjectDataSource
Control:
Inserting data using the ObjectDataSource
control is also pretty simple. All you need to do is to use the correct insert
parameter type and set the InsertMethod name and that's it. Here is a simple
example which takes input using a TextBox control and inserts it into the
database.
| <asp:ObjectDataSource
ID="CustomerData"
SelectMethod="GetAllCustomers"
InsertMethod="AddNewCustomer"
TypeName
=
"AzamSharp.Testing.BusinessLogic.Customer"
runat="server">
<InsertParameters>
<asp:ControlParameter
ControlID="txtFirstName"
Name="firstName"
PropertyName
=
"Text"
Type="String"
/>
<asp:ControlParameter
ControlID
=
"txtLastName"
Name="lastName"
PropertyName="Text"
Type="String"
/>
</InsertParameters>
|
In the button click event you need to call
ObjectDataSource insert method which will call the appropriate custom insert
method which is specified by you. In the above code ControlParameter represents
the control from which the arguments is coming which in this case is the TextBox
control.
|
protected
void Button1_Click(object
sender, EventArgs
e) {CustomerData.Insert(); } |
or if you like you can do all the stuff
dynamically like this:
|
private
void
InsertDynamically() {
string
firstName = txtFirstName.Text;
string
lastName = txtLastName.Text;
CustomerData.InsertMethod =
"AddNewCustomer";
CustomerData.InsertParameters.Add("FirstName",
firstName);
CustomerData.InsertParameters.Add("lastName",
lastName);
} |
When you call CustomerData.Insert() where
CustomerData is the name of the ObjectDataSource control it will call the method
that you have provided in the InsertMethod property which in this case is "AddNewCustomer".
The TypeName property describe where is the method location which is the name of
the class.
|
// This accepts firstName
and lastName as String values
public
static
void AddNewCustomer(string
firstName, string
lastName)
{
string
query = "INSERT INTO
Customers(FirstName,LastName) VALUES(@FirstName, @LastName)";
SqlConnection myConnection =
new
SqlConnection(ConnectionString);
SqlCommand
myCommand = new
SqlCommand(query,
myConnection);
myCommand.Parameters.AddWithValue("@FirstName",
firstName);
myCommand.Parameters.AddWithValue("@LastName",
lastName);
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
} |
Since, the GridView control is already bind to
the ObjectDataSource control using the DataSourceID property you will see that
as soon as you insert new data it will be displayed in the GridView control.
Deleting Data using ObjectDataSource
control:
Deleting is also much like inserting. Here is
the code that deletes the customer based on its customer ID.
|
public
static
void DeleteCustomer(int
customerID) {
string
query = @"DELETE FROM Customers WHERE
CustomerID = @CustomerID";
SqlConnection myConnection =
new
SqlConnection(ConnectionString);
SqlCommand
myCommand = new
SqlCommand(query,
myConnection);
myCommand.Parameters.AddWithValue("@CustomerID",
customerID);
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
} |
And the button click code for the delete
button:
|
protected
void Button2_Click(object
sender, EventArgs
e) {
string
customerID = (txtCustomerID.Text);
CustomerData.DeleteMethod =
"DeleteCustomer";
CustomerData.DeleteParameters.Add("customerID",
TypeCode.Int32,
customerID);
CustomerData.Delete();
} |
I will leave updating as an exercise for the
User.
I hope you liked the article, happy coding!