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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос о SqlDataSource и хранимой процедуре, не работает как надо 
V
    Опции темы
lankin
Дата 29.4.2009, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 377
Регистрация: 13.12.2006

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



Есть aspx, в котором отражается инфа по неотмодерированному объявлению.

Код

<asp:Repeater runat="server" ID="autoRepeater" DataSourceID="autoSource" OnItemDataBound="FillAutoAd">
                <ItemTemplate>
                    <tr runat="server" id="adRow">
                        <td style="text-align: center">
                            <asp:Label Text='<%#Eval("id") %>' runat="server" ID="idLabel"></asp:Label>
                        </td>
                        <td>
                            <table>
                                <tr>
                                    <td>
                                        <b>Марка:</b>
                                        <%#Eval("brand_name") %>
                                    </td>
                                </tr>
                                                                <tr>
                                    <td>
                                        <b>Модель:</b>
                                        <%#Eval("model_name") %>
                                    </td>
                                </tr>
                                 <tr>
                                    <td>
                                          <asp:Button runat="server" ID="approve" Text="Опубликовать"
                                                          OnClick="ApproveClick" PostBackUrl="~/auto/default.aspx"/>
                                     </td>
                                 </tr>
                             </table>
                        </td>
                    </tr>
                </ItemTemplate>
</asp:Repeater>
<asp:SqlDataSource runat="server" ID="autoSource" ConnectionString="<%$ ConnectionStrings:MyConnectionString %>">
        </asp:SqlDataSource>


его CodeBehind:
Код

public partial class _default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            autoSource.SelectCommand = "P$get_for_moderation";
            autoSource.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;
            autoSource.SelectParameters.Add("sender", User.Identity.Name);
            autoSource.SelectParameters.Add("is_moderated", "0");
            autoSource.SelectParameters.Add("page_size", "1");
        }
               protected void ApproveClick(object sender, EventArgs e)
        {
            SetAdModerated(Int32.Parse(((Button)sender).CommandArgument));
        }
        private void SetAdModerated(int id)
        {
            using (SqlConnection conn = new SqlConnection(autoSource.ConnectionString))
            {
                using (SqlCommand cmd = new SqlCommand("P$set_as_moderated", conn))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@id", id);

                    conn.Open();
                    cmd.ExecuteNonQuery();
                }
            }
        }
        protected void FillAutoAd(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.DataItem != null)
            {
                HtmlTableRow row = (HtmlTableRow)e.Item.FindControl("adRow");
                foreach (Control ctrl in row.Controls[1].Controls)
                {
                    if (ctrl is Button)
                    {
                        Button button = (Button)ctrl;
                        button.CommandArgument = (((DataRowView)e.Item.DataItem).Row["id"]).ToString();
                    }
                }
 
            }
        }
}


В общем в чем проблема: при первичной загрузке все работает нормально, процедура достает первое неотмодерированное объявление из таблички. Далее жмем на кнопу "опубликовать" и в другая процедура производит апдейт таблички - присваивает значение 1 к признаку модерации(объявление отмодерировано). Далее происходит обновление этой дефолтной страницы и должно появиться другое объявление.
НО
Приходит это же. Процедура не отрабатывает при селекте. Почему? Раньше SelectCommand у меня находился в aspx-е, но и это не давало иного результата. Потом я перенес в Page_Load. Ктонить знает почему? Или процедура селекта обязательно должна отработать?


Это сообщение отредактировал(а) lankin - 29.4.2009, 07:20
PM MAIL   Вверх
Idsa
Дата 29.4.2009, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

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



Цитата(lankin @  29.4.2009,  11:18 Найти цитируемый пост)
Процедура не отрабатывает при селекте. 

Какая процедура? Процедура обновления записи в таблице?

А корректный ли id'шник приходит в метод SetAdModerated? Вы его считываете из Button.CommandArgument, но я не вижу никакого баиндинга на CommandArgument в разметке.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
lankin
Дата 29.4.2009, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 377
Регистрация: 13.12.2006

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



Нашли причину: Reapeter, как товарищ подсказал, и должен выводитьданные, которые были в нем ранее!!!!
Поэтому просто в обработчике события Button в конце добавили autoRepeater.DataBind(); 
Теперь работает нормально.

Добавлено @ 07:58
Idsa, там все корректно работает, теперь уже smile 

Это сообщение отредактировал(а) lankin - 29.4.2009, 07:59
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

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

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

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


 




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


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

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