ObjectDataSource en asp.net2.0 puede permitir que los controles de visualización de datos, como GridView, estén vinculados para su visualización y edición. También admite paginación, clasificación, etc. integradas. Después de usar ORM, también puede usar ObjectDataSource.
La paginación aquí ya no extrae todas las páginas de la base de datos y luego las vincula selectivamente, sino que extrae directamente las páginas de la base de datos y luego las vincula. La diferencia sigue siendo enorme y la eficiencia ha mejorado enormemente.
ObjectDataSource proporciona directamente la edición, creación y clasificación, y no es necesario escribir ningún código en GridView.
De esta manera, el diseño del objeto puede contener mucha lógica, al menos para las operaciones de la base de datos, y la interfaz de usuario parecerá relativamente simple. Si la despegas y la abres un poco, será más beneficioso trasplantarla para ganar. en el futuro, o convertirlo en un SmartClient.
Aquí hay un blog que habla mejor http://www.evosoftworks.com/Articles/wormods.aspx .
Estaba usando WilsonORM, así que hice uno en consecuencia.
La estructura básica es así:
UI (GridView y otros controles--control ObjectDataSource)----〉Clase ObjectDataSource (objeto, escritura de paginación CRUD y otra lógica)---〉(ORM implementa CRUD)---〉DB
tiene varios pasos principales
1: agregue propiedades y métodos al objeto para completar CRUD, paginación y otra lógica
2: Configure controles de UI como GridView para conectarse al control ObjectDataSource.
Veamos primero el primero.
1: Agregue propiedades y métodos al Objeto para completar CRUD, paginación y otra lógica. La herramienta genera la clase de objeto en función de la estructura de la base de datos, y también se genera el archivo de mapeo.
Primero, agregue un atributo de identificación DataObject() al Objeto, en el espacio de nombres System.ComponentModel [DataObject()]
clase pública Descripción del producto
{En segundo lugar, agregue métodos CRUD a esta clase de objeto.
Veamos primero un método Insertar.
[Método de objeto de datos (tipo de método de objeto de datos. Insertar)]
Insertar vacío estático público (Descripción del producto Descripción del producto)
{
intentar
{
Manager.DataManager.StartTracking(productDescription, InitialState.Inserted);
Manager.DataManager.PersistChanges (descripción del producto);
}
captura (Excepción ex)
{
log.Error(ex);
}
} Este método debe estar precedido por un atributo [DataObjectMethod(DataObjectMethodType.Insert)], lo que indica que este es el método Insert;
Este método es un método público estático;
El parámetro es una instancia del propio Objeto. Esto es mejor, porque la lógica es fácil de entender y opera en el Objeto.
El resto de los métodos Eliminar y Actualizar también están escritos de esta manera.
Luego eche un vistazo al método Seleccionar, que es bastante especial.
Seleccionar método
1 [Método de objeto de datos (tipo de método de objeto de datos. Seleccionar)]
2 Colección pública <Descripción del producto> Recuperar (consulta de cadena, int maxRows, int startRowIndex, cadena sortClause)
3 {
4 intento
5 {
6 int numPáginas = 0;
7 if (sortClause == null || sortClause == "")
8 sortClause = "Descripción de fecha de modificación";
9 Colección<ProductDescription> cs;
10 cs = RetrievePage(query, sortClause, maxRows, (int)Math.Ceiling((double)startRowIndex / maxRows) + 1, out numPages);
11 _numRecs = ((IObjectPage)cs).TotalCount;
12 vueltas;
13}
14 capturas (Excepción ex)
15 {
16 registro.Error(ex);
17 devuelven nulo;
18}
19}
20 [Método de objeto de datos (tipo de método de objeto de datos. Seleccionar)]
21 Recuperación de conjunto de objetos público estático (clave de cadena, valor de cadena)
Veintidós {
23 si (Valor == nulo || Valor == "")
24 retorno nulo;
25 intento
26 {
27 ayudante QueryHelper = Manager.DataManager.QueryHelper;
28 Clave = ayudante.GetFieldName(typeof(ProductDescription).ToString() + "." + Clave);
29 Consulta ObjectQuery = new ObjectQuery(typeof(ProductDescription), String.Format("{0}='{1}'", Clave, Valor), "");
30 ObjectSet obj = Manager.DataManager.GetObjectSet(consulta);
31 objeto de retorno;
32}
33 capturas (Excepción ex)
34 {
35 log.Error(ex);
36 devuelven nulo;
37 }
38 }
39
40 public int RecCount (consulta de cadena, int maxRows, int startRowIndex, cadena sortClause)
41 {
42 retorno _numRecs;
43}
44
45 Colección estática pública <Descripción del producto> RetrievePage (cadena cláusula donde, cadena clasificación cláusula, int tamaño de página, int índice de página, fuera int número de páginas)
46 {
47 Consulta ObjectQuery<ProductDescription> = nueva ObjectQuery<ProductDescription>(whereClause, sortClause, pageSize, pageIndex);
48 ObjectSet<ProductDescription> pageSet = Manager.DataManager.GetObjectSet<ProductDescription>(consulta);
49 pageCount = pageSet.PageCount;
50 páginas de retorno;
51 } El primer método es public Collection<ProductDescription> Retrieve(string query, int maxRows, int startRowIndex, string sortClause), que es un método que puede implementar paginación y clasificación integradas. Cabe señalar que este código _numRecs = ((IObjectPage)cs).TotalCount; aquí, después de la paginación, el número total de páginas se extrae inmediatamente. Esto se utiliza para mostrar el número de página en consecuencia, el método public int RecCount(; string query, int maxRows, int startRowIndex, string sortClause) se utilizan para recuperar el número de registros. Tenga en cuenta que estos dos métodos deben corresponder y los parámetros son los mismos.
El segundo método, static public ObjectSet Retrieve(string Key, string Value), simplemente recupera un registro. Se puede utilizar en la visualización de DetailView/FormView.
Aunque parece haber mucho código, en realidad tiene muchos patrones, por lo que puede usar CodeSmith o modificar directamente la herramienta ORMHelper para generarlo dinámicamente sin escribir código manualmente.
Con estos cuatro métodos, se completan CRUD, paginación y clasificación. Dicho objeto no tiene nada que ver con la interfaz de usuario, sino solo con la lógica de datos.
2: configuración de la interfaz de usuario. La configuración de la interfaz de usuario también se divide en dos capas: GridView y otros controles de visualización ObjectDataSource;
Ahora configure la fuente de datos del Objeto para controles como GridView y conéctese directamente al Objeto para implementar funciones como visualización y edición. De hecho, se trata de establecer una propiedad conectada a ObjectDataSource.
<asp:GridView ID="gv_data" runat="servidor" AllowPaging="True" AllowSorting="True" DataSourceID="ods_list"
Esta es la configuración del control ObjectDataSource
Fuente de datos del objeto
1<asp:ObjectDataSource ID="ods_list" runat="servidor" DataObjectTypeName="BusinessModel.ProductDescription"
2 DeleteMethod="Eliminar" OldValuesParameterFormatString="original_{0}" SelectMethod="Recuperar"
3 TypeName="BusinessModel.ProductDescription" UpdateMethod="Actualización" SortParameterName="sortClause"
4 MaximumRowsParameterName="maxRows" SelectCountMethod="RecCount" EnablePaging="true"
5 ConflictDetection="OverwriteChanges" ConvertNullToDBNull="false">
6 <Seleccionar parámetros>
7 <asp:Nombre del parámetro="consulta" Tipo="Cadena" />
8 <asp:Nombre del parámetro="maxRows" Tipo="Int32" />
9 <asp:Nombre del parámetro="startRowIndex" Tipo="Int32" />
10 <asp:Nombre del parámetro="sortClause" Tipo="Cadena" />
11 </Seleccionar parámetros>
12</asp:ObjectDataSource>
Eche un vistazo a las propiedades internas, que son los parámetros para configurar el método CRUD y el nombre del método correspondiente. Esto es exactamente lo que implementamos en la clase. Por ejemplo, el método Eliminar se configura aquí: DeleteMethod="Delete"; y aquí está el atributo del número de registros que acabamos de mencionar: SelectCountMethod="RecCount" y clasificación, etc.
¿Cómo pasar los parámetros aquí? El sistema pasa los atributos relacionados con el sistema, por ejemplo, maxRows, startRowIndex, etc.; también se pueden pasar mediante código: this.ods_list.SelectParameters["query"].DefaultValue = query