ASP.NET 2.0バインドの高度なテクニック


1.単純データバインド
<!--ASP.NET 1.x data binding expression -->
<%# DataBinder.Eval(Container.DataItem, "Price") %>
<!--Equivalent ASP.NET 2.0 data binding expression -->
<%# Eval("Price") %>
<!--XML data binding -->
<%# XPath("Price") %>

 
2.データソースコントロール
                                            
SqlDataSource                           SQL        
AccessDataSource               Access     
XmlDataSource                     XML     
ObjectDataSource                            
SiteMapDataSource                         

 
2.1 SqlDataSourceキー属性
                                                   
ConnectionString                                   
SelectCommand                                    
InsertCommand                                    
UpdateCommand                                 
DeleteCommand                                   
DataSourceMode                                DataSet  DataReader(    = DataSet)
ProviderName                                   (   = SQL Server .NET provider)

 
2.2 SqlDataSourceは以下の属性によるデータキャッシュをサポートする
                                              
EnableCaching                                   (   = false)
CacheDuration                                     
CacheExpirationPolicy                     sliding   absolute
CacheKeyDependency                         
SqlCacheDependency                              

 
2.3パラメトリックコマンドXxxParameterタイプ指定パラメータソース
                                          
SelectParameters                         
InsertParameters                         
UpdateParameters                       
DeleteParameters                        
FilterParameters                           

 
2.4 XxxParameterタイプ
                                                   
ControlParameter                                     
CookieParameter                                 cookie   
FormParameter                                         
ProfileParameter                                  profile   
QueryStringParameter                                 
Parameter                                                
SessionParameter                               session   

 
2.5 ControlParameterの使用例
<asp:SqlDataSourceID="Countries" RunAt="server"
ConnectionString="server=localhost;database=northwind;"
SelectCommand="select distinct country from customers order by country" />
<asp:SqlDataSourceID="Customers" RunAt="server"
ConnectionString="server=localhost;database=northwind;"
SelectCommand="select * from customers where country =@Country">
<SelectParameters>
<asp:ControlParameterName="Country" ControlID="MyDropDownList"
PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
<asp:DropDownListID=" MyDropDownList" DataSourceID="Countries"
DataTextField="country" AutoPostBack="true" RunAt="server" />
<asp:DataGridDataSourceID="Customers" RunAt="server" />

 
2.7ストレージプロセスの調査例
<asp:SqlDataSourceID="Countries" RunAt="server"
ConnectionString="server=localhost;database=northwind;"
SelectCommand="proc_GetCountries" />
<asp:SqlDataSourceID="Customers" RunAt="server"
ConnectionString="server=localhost;database=northwind;"
SelectCommand="proc_GetCustomers">
<SelectParameters>
<asp:ControlParameterName="Country" ControlID="MyDropDownList"
PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
<asp:DropDownListID="MyDropDownList" DataSourceID="Countries"
DataTextField="country" AutoPostBack="true" RunAt="server" />
<asp:DataGridDataSourceID="Customers" RunAt="server" />
CREATE PROCEDURE proc_GetCustomers
@Country nvarchar(32) AS
SELECT * FROM Customers
WHERE Country = @Country
GO
CREATE PROCEDURE proc_GetCustomers
CREATE PROCEDURE proc_GetCountriesAS
SELECT DISTINCT Country
FROM Customers
ORDER BY Country
GO

 
3.XmlDataSourceはXMLをデータソースとして使用してキャッシュとXSL変換をサポートし、クエリーバインドのみをサポートし、更新はサポートしない
<asp:XmlDataSourceID="Rates" DataFile="Rates.xml" RunAt="server" />
<asp:TreeViewID="MyTreeView" DataSourceID="Rates" RunAt="server" />

3.1 XmlDataSourceの重要な属性
                                                        
DataFile XML                                           
TransformFile                                      XSL            
EnableCaching                                        cache (   = false)
XPath XPath                                               
CacheDuration                                            
CacheExpirationPolicy                            sliding   absolute
CacheKeyDependency                              

 4. ObjectDataSourceはデータコンポーネントからデータをバインドし、ミドルウェアのデータバインドを提供し、データアクセスとUIを離脱させる.2種類のデータバインド方式SelectMethod、InsertMethod、UpdateMethod、and DeleteMethodはキャッシュを使用するかどうかを選択し、パラメータ4.1 ODSキー属性を使用するかどうかを選択することができる
ODS     
                                                             
InsertParameters                                            
UpdateParameters                                         
DeleteParameters                                           
SelectParameters                                            
CacheDuration                                                  
SqlCacheDependency                                     
     
ObjectDataSource.SelectMethod                     
        :ODS                            
  ObjectCreated  ObjectDisposing             

 5.強化されたDataGridコントロールは、CheckBoxFieldsが要素で高カスタマイズ可能なユーザーインタフェースgridView列タイプを宣言するなど、複雑なデータ・セル・タイプをサポートします.
                                                 
BoundField                                            
ButtonField                                    
CheckBoxField                             check boxes    boolean   
HyperLinkField                                 
TemplateField                                    HTML  
CommandField                                      
ImageField                                       

 6. コンフリクト判定
    
            ,     
UpdateCommand      ConflictDetection=“CompareAllValues”   
    
         ,       
UpdateCommand      ConflictDetection=“OverwriteChanges”   

6.1先入勝利法則の更新
<asp:SqlDataSourceID="Employees" RunAt="server"
ConnectionString="server=localhost;database=northwind;"
SelectCommand="select employeeid, lastname, firstnamefrom employees"
UpdateCommand="update employees set lastname=@lastname, firstname=
@firstnamewhere employeeid=@original_employeeid and lastname=
@original_lastnameand firstname=@original_firstname"
ConflictDetection="CompareAllValues">
<UpdateParameters>
<asp:ParameterName="EmployeeID" Type="Int32" />
<asp:ParameterName="lastname" Type="String" />
<asp:ParameterName="firstname" Type="String" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:GridViewDataSourceID="Employees" Width="100%" RunAt="server"
DataKeyNames="EmployeeID" AutoGenerateEditButton="true" />

 7.エラー検出データの更新後にコントロールが呼び出すイベントGridView.RowUpdated,DetailsView.ItemUpdated,SqlDataSource.Updated,etc.「status」のイベントを処理します.データベースが異常であるかどうかにかかわらず、データベースの異常が処理されるか、または再破棄されるかにかかわらず、どのくらいのデータベース行が修正され、処理が更新されたかを表示します.
<asp:SqlDataSourceID="Employees" RunAt="server" 
UpdateCommand="" OnUpdated="OnUpdateComplete">

</asp:SqlDataSource>

void OnUpdateComplete (Object source, SqlDataSourceStatusEventsArgse)
{
if (e.Exception!= null) {
// Exception thrown. Set e.ExceptionHandledto true to prevent
// the SqlDataSourcefrom throwing an exception, or leave it set
// to false to allow SqlDataSourceto rethrowthe exception
}
else if (e.AffectedRows== 0) {
// No exception was thrown, but no records were updated,either.
// Might want to let the user know that the update failed
}
}