Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ObjectDataSource.SelectMethod, Как установить проперти страницы 
:(
    Опции темы
StepS
  Дата 17.4.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.8.2005
Где: Днепропетровск

Репутация: нет
Всего: нет



Привет, всем.
Есть страница:
Код

using System;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class ActiveRoute : Page {

    property DataSet MyDataSet{
       get{return Cache["myDataset"] as DataSet;}
    }

    protected void BtnUpdateVehicleClick(object sender, EventArgs e) {
        lblVehicle.Text = currentId.Value;
    }
    
....
}


и есть aspx:
Код

...
<asp:ObjectDataSource ID="datasource" runat="server" SelectMethod="MyDataSet" TypeName="??"/>
<asp:GridView DataSourceId="datasource" ID="grdMy" runat="server">
</asp:GridView>
.....


что мне нужно указать в TypeName, чтобы грида заработала ? 
Страницу я создаю через Wizard. Работаю на ASP.NET 2.0, VS 2005.
PM MAIL ICQ   Вверх
tol05
Дата 17.4.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Класс ObjectDataSource связывает грид с классом, который представляет источник данных и через свои методы эти самые данные и выдает.
Так что TypeName должен содержать имя этого класса, вместе с именем сборки.
Код

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" EnableViewState="false"
            TypeName="ProAspNet20.DAL.Employees" /> 

        <asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1" AutoGenerateColumns="false">
            <Columns>
                <asp:BoundField DataField="id" HeaderText="ID" />
                <asp:BoundField DataField="firstname" HeaderText="First Name" />
                <asp:BoundField DataField="lastname" HeaderText="Last Name" />                
                <asp:BoundField DataField="title" HeaderText="Title" />                                
                <asp:BoundField DataField="birthdate" HeaderText="Birth" DataFormatString="{0:dd-MMM-yy}" />                                
            </Columns>
        </asp:GridView>


где
Код

using System;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Collections.Specialized;
using ProAspNet20.DAL.Helpers;

namespace ProAspNet20.DAL
{
    public class Employee
    {
        private string _firstname, _lastname, _title, _titleofcourtesy, _notes, _extension;
        private string _street, _postalcode, _city, _country, _phone, _region, _fax;
        private int _id, _reportsTo;
        private DateTime _birthdate, _hiredate;

        public Employee()
        {
        }

        public int ID
        {
            get { return _id; }
            set { _id = value; }
        }

         public string FirstName
        {
            get { return _firstname; }
            set { _firstname = value; }
        }

         public string LastName
        {
            get { return _lastname; }
            set { _lastname = value; }
        }

         public string Title
        {
            get { return _title; }
            set { _title = value; }
        }

         public string TitleOfCourtesy
        {
            get { return _titleofcourtesy; }
            set { _titleofcourtesy = value; }
        }

         public DateTime BirthDate
        {
            get { return _birthdate; }
            set { _birthdate = value; }
        }
        
         public DateTime HireDate
        {
            get { return _hiredate; }
            set { _hiredate = value; }
        }

         public int ReportsTo
        {
            get { return _reportsTo; }
            set { _reportsTo = value; }
        }

         public string Extension
        {
            get { return _extension; }
            set { _extension = value; }
        }

         public string Notes
        {
            get { return _notes; }
            set { _notes = value; }
        }

        public string Street
        {
            get { return _street; }
            set { _street = value; }
        }

        public string PostalCode
        {
            get { return _postalcode; }
            set { _postalcode = value; }
        }

        public string City
        {
            get { return _city; }
            set { _city = value; }
        }

        public string Country
        {
            get { return _country; }
            set { _country = value; }
        }

        public string Phone
        {
            get { return _phone; }
            set { _phone = value; }
        }

        public string Fax
        {
            get { return _fax; }
            set { _fax = value; }
        }

        public string Region
        {
            get { return _region; }
            set { _region = value; }
        }

        public override string ToString()
        {
            return String.Format("{0} {1}", _firstname, _lastname);
        }
    }


    public class NullEmployee : Employee
    {
        public NullEmployee()
        {
            ID = -1;
        }
    }


    public class EmployeeCollection : List<Employee>
    {
    }


    public class Employees
    {
        public static string ConnectionString
        {
            get { return ConfigurationManager.ConnectionStrings["LocalNWind"].ConnectionString; }
        }

        public static Employee Load(int id)
        {
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                SqlCommand cmd = new SqlCommand(EmployeeCommands.cmdLoad, conn);
                cmd.Parameters.AddWithValue("@id", id);

                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                reader.Read();
                Employee emp = HelperMethods.GetEmployee(reader);
                reader.Close();
                conn.Close();

                return emp;
            }
        }

        public static EmployeeCollection LoadAll()
        {
            EmployeeCollection coll = new EmployeeCollection();

            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                SqlCommand cmd = new SqlCommand(EmployeeCommands.cmdLoadAll, conn);

                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                HelperMethods.FillEmployeeList(coll, reader);
                reader.Close();
                conn.Close();
            }

            return coll;
        }

        public static EmployeeCollection LoadByCountry(string country)
        {
            EmployeeCollection coll = new EmployeeCollection();

            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                SqlCommand cmd = new SqlCommand(EmployeeCommands.cmdLoadByCountry, conn);
                cmd.Parameters.AddWithValue("@country", country);

                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                HelperMethods.FillEmployeeList(coll, reader);
                reader.Close();
                conn.Close();
            }

            return coll;
        }

        public static StringCollection GetEmployeeCountries()
        {
            StringCollection countries = new StringCollection();

            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                SqlCommand cmd = new SqlCommand(EmployeeCommands.cmdEmpCountries, conn);

                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                HelperMethods.FillCountryList(countries, reader);
                reader.Close();
                conn.Close();
            }

            return countries;
        }

        public static void Save(Employee emp)
        {
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                SqlCommand cmd = new SqlCommand(EmployeeCommands.cmdSave, conn);
                cmd.Parameters.AddWithValue("@id", emp.ID);
                cmd.Parameters.AddWithValue("@lastname", emp.LastName);
                cmd.Parameters.AddWithValue("@firstname", emp.FirstName);
                cmd.Parameters.AddWithValue("@birthdate", emp.BirthDate);
                cmd.Parameters.AddWithValue("@title", emp.Title);
                cmd.Parameters.AddWithValue("@country", emp.Country);

                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
                return;
            }
        }
    }


    public static partial class HelperMethods
    {
        public static Employee GetEmployee(SqlDataReader reader)
        {
            int index;
            if (!reader.HasRows)
                return null;
            
            Employee emp = new Employee();
            emp.ID = (int) reader["employeeid"];
            emp.LastName = reader["lastname"].ToString();
            emp.FirstName = reader["firstname"].ToString();

            index = reader.GetOrdinal("birthdate");
            if (reader.IsDBNull(index))
                emp.BirthDate = DateTime.MinValue;
            else
                emp.BirthDate = (DateTime)reader["birthdate"];

            index = reader.GetOrdinal("hiredate");
            if (reader.IsDBNull(index))
                emp.HireDate = DateTime.MinValue;
            else
                emp.HireDate = (DateTime)reader["hiredate"];

            emp.Extension = reader["extension"].ToString();
            emp.Title = reader["title"].ToString();
            emp.TitleOfCourtesy = reader["titleofcourtesy"].ToString();
            emp.Notes = reader["notes"].ToString();
            
            index = reader.GetOrdinal("reportsto");
            if (reader.IsDBNull(index))
                emp.ReportsTo = -1;
            else
                emp.ReportsTo = (int) reader["reportsto"];
            emp.Street = reader["address"].ToString();
            emp.City = reader["city"].ToString();
            emp.Country = reader["country"].ToString();
            emp.Region = reader["region"].ToString();
            emp.PostalCode = reader["postalcode"].ToString();
            emp.Phone = reader["homephone"].ToString();
            emp.Fax = "";
            return emp;
        }

        public static void FillEmployeeList(EmployeeCollection coll, SqlDataReader reader)
        {
            while (reader.Read())
            {
                Employee emp = HelperMethods.GetEmployee(reader);
                coll.Add(emp);
            }
        }

        public static void FillCountryList(StringCollection coll, SqlDataReader reader)
        {
            while (reader.Read())
            {
                if (reader["country"] != null)
                {
                    string country = reader["country"].ToString();
                    if (!String.IsNullOrEmpty(country))
                        coll.Add(country);
                }
            }
        }
    }
}



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
StepS
Дата 17.4.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.8.2005
Где: Днепропетровск

Репутация: нет
Всего: нет



эээ... если я прописываю метод бизнеса, то у меня все работает. Вопрос был в том, как перенести метод (SelectMethod) из бизнеса на Web Page-у.

т.е. так все работает:
Код

        <asp:ObjectDataSource ID="datasource" runat="server" EnableCaching="true" SelectMethod="Enum"       TypeName="MyNameSpace.Bussines.BCLocation" />
        <asp:GridView ID="grdLocation" runat="server" AutoGenerateColumns="false" AllowPaging="true" 
                AllowSorting="true" DataSourceID="datasource" PageSize="20" Width="100%" EnableSortingAndPagingCallbacks="true">
            <Columns>
                <asp:BoundField DataField="Name" SortExpression="Name" HeaderText="Location" />
                <asp:ButtonField ButtonType="image" HeaderText="Action" ImageUrl="~/img/buttons/add.jpg" CommandName="add" 
                    ItemStyle-HorizontalAlign="Center" ItemStyle-Width="10%" />
            </Columns>
        </asp:GridView>


где бизнесс выглядит след образом:
Код

namespace MyNameSpace.Bussines {
    public class BCLocation {
        
        public static DsLocation Enum() {
            return DaLocation.Enum();
        }
    }
}

PM MAIL ICQ   Вверх
tol05
Дата 17.4.2007, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Так зачем тебе вообще ObjectDataSource? Этот класс для использвания Object в качестве DataSource
Возьми просто динамическое связывание и примени что-то типа этого?

<asp:GridView ID="grdLocation" runat="server" AutoGenerateColumns="false" DataSource="<%# MyDataSet %>" />



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
StepS
Дата 17.4.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.8.2005
Где: Днепропетровск

Репутация: нет
Всего: нет



Если использовать DataSource вместо DataSourceID, тогда теряеться автоматические сортировка и пэйджинг у GridView :( . А они нужны по-любому и нужны через Ajax. Самому писать методы не хочеться, думаю что можно как-то все-таки указать метод/свойство страницы в качестве SelectMethod-а у ObjectDataSource.


Это сообщение отредактировал(а) StepS - 17.4.2007, 17:18
PM MAIL ICQ   Вверх
Mymik
Дата 18.4.2007, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



StepS, Вообще-то Paging поддерживается GridView... так что ты его не потеряешь. Что касается автоматической сортировки... это ты о чем ??? Разве ObjectDataSource сам сортирует записи ??? а по какому принципу ??? Я всегда в методах ObjectDataSource'а делал сортировку через преобразование в DataView. И возвращал DataView. 

Что касается темы. То TypeName это указание класса в котором находятся методы. Т.е. ты можешь спокойно написать класс твоего Page

Добавлено через 1 минуту и 30 секунд
Только ж не забудь сделать их статическими.  smile 


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
StepS
Дата 18.4.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.8.2005
Где: Днепропетровск

Репутация: нет
Всего: нет



Mymik, вот что написано в MSDN-е о автоматической сортировке и пэйджинге:

*To bind to a data source control, set the DataSourceID property of the GridView control to the ID value of the data source control. The GridView control automatically binds to the specified data source control and can take advantage of the data source control's capabilities to perform sorting, updating, deleting, and paging functionality. This is the preferred method to bind to data.

*To bind to a data source that implements the System.Collections.IEnumerable interface, programmatically set the DataSource property of the GridView control to the data source and then call the DataBind method. When using this method, the GridView control does not provide built-in sorting, updating, deleting, and paging functionality. You need to provide this functionality by using the appropriate event.

т.е. если я использую DataSourceID и ObjectDataSource, то для сортировки и пэйджинга мне не нужно писать ни строчки кода, а так же можно включить, чтоб эти операции выполнялись через Ajax.  smile 

то что в TypeName нужно указать класс в котором находиться метод это я в курсе  smile  только вот прописываю туда имя класса старницы, а он мне выдает ошибку, когда захожу на страницу:

The type specified in the TypeName property of ObjectDataSource 'datasource' could not be found.

хотя сделал метод MyDataSet статическим.
Т.е. грубо говоря, вопрос в следующем: в каком namespace_е находяться страницы во времы выполнения, чтобы я мог указать класс в TypeName ?

Добавлено @ 11:07
To Mymik
Цитата

Разве ObjectDataSource сам сортирует записи ??? а по какому принципу ??? 


Вот что нужно написать, чтобы сортировка и пэйджинг были автоматическими (т.е. без написания дополнительного кода):


        <asp:ObjectDataSource ID="datasource" runat="server" EnableCaching="true" SelectMethod="Enum" TypeName="My.Bussines.BCLocation" />
        <asp:GridView ID="grdLocation" runat="server" AutoGenerateColumns="false" AllowPaging="true" 
                AllowSorting="true" DataSourceID="datasource" PageSize="20" Width="100%" EnableSortingAndPagingCallbacks="true">
            <Columns>
                <asp:BoundField DataField="Name" SortExpression="Name" HeaderText="Start Location / Call Points / End Location" />
                <asp:ButtonField ButtonType="image" HeaderText="Action" ImageUrl="~/img/buttons/add.jpg" CommandName="add" 
                    ItemStyle-HorizontalAlign="Center" ItemStyle-Width="10%" />
            </Columns>
        </asp:GridView>


и все.. появляются ссылки в Header-e колонки и он их сортирует по принципу: sortexpression = "ASC + yoursortexpr" или "DESC + yoursortexpr"
где yoursortexpr - это "название поля" в таблице, которую ты отображаешь. и он сортирует по этому полю.

Это сообщение отредактировал(а) StepS - 18.4.2007, 11:09
PM MAIL ICQ   Вверх
Mymik
Дата 18.4.2007, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Цитата(StepS @  18.4.2007,  10:58 Найти цитируемый пост)
то что в TypeName нужно указать класс в котором находиться метод это я в курсе  smile  только вот прописываю туда имя класса старницы, а он мне выдает ошибку, когда захожу на страницу:

Походу можно максимум куда засунуть, так это только лишь в App_Code


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.