<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ObjectDataSourceSample.aspx.cs"
Inherits="superspace.control.info.ObjectDataSourceSample" %>
<!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">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:HiddenField ID="hdnContentId" runat="server" />
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
DeleteMethod="Delete"
InsertMethod="Insert"
SelectMethod="Select"
UpdateMethod="Update"
OldValuesParameterFormatString="{0}"
TypeName="SuperspaceLib.VoteOption">
<DeleteParameters>
<asp:Parameter Name="ContentId" Type="String" />
<asp:Parameter Name="OptionID" Type="String" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="ContentId" Type="String" />
<asp:Parameter Name="OptionID" Type="String" />
<asp:Parameter Name="OptionName" Type="String" />
</InsertParameters>
<SelectParameters>
<asp:ControlParameter ControlID="hdnContentId" Name="ContentId" PropertyName="Value"
Type="String" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="ContentId" Type="String" />
<asp:Parameter Name="OptionID" Type="String" />
<asp:Parameter Name="OptionName" Type="String" />
</UpdateParameters>
</asp:ObjectDataSource>
<asp:TextBox ID="txtVoteOption" runat="server" MaxLength="50" Style="width: 100%;" />
<asp:Button ID="btnAddOption" runat="server" Text="新增" OnClick="btnAddOption_Click" />
<asp:GridView ID="gvOptions" runat="server" AutoGenerateColumns="False" GridLines="None"
ShowHeader="False" DataKeyNames="ContentId,OptionID" EnableModelValidation="True"
DataSourceID="ObjectDataSource1">
<Columns>
<asp:BoundField DataField="OptionName" HeaderText="OptionName" SortExpression="OptionName" />
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit"
Text="編輯"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Delete"
Text="刪除"></asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update"
Text="更新"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel"
Text="取消"></asp:LinkButton>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Data;
using System.Web;
namespace SuperspaceLib
{
[DataObject(true)]
public class VoteOption
{
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable Select(string ContentId)
{
DataTable dtOption = null;
if (HttpContext.Current.Session[ContentId] == null)
{
dtOption = new DataTable("VoteOption");
dtOption.Columns.Add("ContentId");
dtOption.Columns.Add("OptionID");
dtOption.Columns.Add("OptionName");
}
else
{
dtOption = HttpContext.Current.Session[ContentId] as DataTable;
}
return dtOption;
}
[DataObjectMethod(DataObjectMethodType.Update)]
public int Update(string ContentId, string OptionID, string OptionName)
{
DataTable dtOption = null;
if (HttpContext.Current.Session[ContentId] == null)
{
dtOption = new DataTable("VoteOption");
dtOption.Columns.Add("ContentId");
dtOption.Columns.Add("OptionID");
dtOption.Columns.Add("OptionName");
}
else
{
dtOption = HttpContext.Current.Session[ContentId] as DataTable;
}
int afftected = 0;
foreach (DataRow row in dtOption.Rows)
{
if (row["ContentId"].Equals(ContentId) && row["OptionID"].Equals(OptionID))
{
row["OptionName"] = OptionName;
afftected++;
}
}
HttpContext.Current.Session[ContentId] = dtOption;
return afftected;
}
[DataObjectMethod(DataObjectMethodType.Insert)]
public int Insert(string ContentId, string OptionID, string OptionName)
{
DataTable dtOption = null;
if (HttpContext.Current.Session[ContentId] == null)
{
dtOption = new DataTable("VoteOption");
dtOption.Columns.Add("ContentId");
dtOption.Columns.Add("OptionID");
dtOption.Columns.Add("OptionName");
}
else
{
dtOption = HttpContext.Current.Session[ContentId] as DataTable;
}
DataRow row = dtOption.Rows.Add(ContentId, OptionID, OptionName);
HttpContext.Current.Session[ContentId] = dtOption;
return 1;
}
[DataObjectMethod(DataObjectMethodType.Delete)]
public int Delete(string ContentId, string OptionID)
{
DataTable dtOption = null;
if (HttpContext.Current.Session[ContentId] == null)
{
dtOption = new DataTable("VoteOption");
dtOption.Columns.Add("ContentId");
dtOption.Columns.Add("OptionID");
dtOption.Columns.Add("OptionName");
}
else
{
dtOption = HttpContext.Current.Session[ContentId] as DataTable;
}
int afftected = 0;
for (int i = dtOption.Rows.Count - 1; i >= 0; i--)
{
DataRow row = dtOption.Rows[i];
if (row["ContentId"].Equals(ContentId) && row["OptionID"].Equals(OptionID))
{
dtOption.Rows.Remove(row);
afftected++;
}
}
HttpContext.Current.Session[ContentId] = dtOption;
return afftected;
}
}
}
HINT:
- OldValuesParameterFormatString="{0}" means parameter will take value of old value by this name format
- Parameter name must compeletly match the param of method