Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > ASP.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2014, 12:47   #1
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию Как обновить данные в БД из GridView под DataSource = Array

Всем привет.

Начинаю работать на ASP.NET. Наткнулся на непонятный механизм сабмита таблицы. Насколько я понимаю, обычно к ней биндится (Object/Sql)DataSource и там прописываются UpdateCommand, например. Но в своем случае я подвязываю массив данных.

Задача такая - в таблице две колонки - label and textbox. Когда какой-то TextBox редактируется - данные в базе обновляются.

Я пытался заставить весь грид как-то обновиться, но не нашел как бы явно сказать ему EditMode. Поэтому в шаблоне строк для textbox добавил свойство "AutoPostBack=True" и обработчик TextChanged. Только вот пост-бек происходит, но обработчик не вызывается, очевидно потому что движок не запоминает каждую ячейку таблицы.

В общем, такой грид
Код:
<asp:GridView ID="gridEmployees" runat="server"  
        AllowPaging="True"
        AllowSorting="<%# AllowSorting %>"
        OnPageIndexChanging="grdView_PageIndexChanging" 
        OnSorting="gridEmployees_Sorting" 
        OnRowEditing="gridEmployees_RowEditing"
        OnRowUpdating="gridEmployees_RowUpdating"
        OnRowCancelingEdit="gridEmployees_RowCancelingEdit"
        AutoGenerateColumns="False">
        <Columns>
            <asp:TemplateField HeaderText="Full name" SortExpression="FullName">
                <ItemTemplate>
                    <asp:Label runat="server" ID="lbSalary" Width="200px" Text='<%# Eval("FullName") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            
            <asp:TemplateField HeaderText="Salary" SortExpression="Salary">
                <%--http://www.codeproject.com/Articles/23471/Editable-GridView-in-ASP-NET--%>
                <ItemTemplate >
                    <div >
                        <asp:TextBox Width="100px" ReadOnly="<%# SalaryReadonly %>" style="text-align: right" TextMode="SingleLine" runat="server" ID="tbSalary" AutoPostBack="True" OnTextChanged="tbSalary_TextChanged" Text='<%# Bind("Salary", "{0:c0}") %>'></asp:TextBox>
                    </div>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
Закулисы
Код:
  public partial class _Default : System.Web.UI.Page
    {
        protected enum TableField
        {
            FullName,
            Salary
        }

        protected bool AllowSorting = true;
        protected bool SalaryReadonly = false;

        private static IDataService dataService = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            InitDataService();
            if (!Page.IsPostBack)
            {
                ddlJobs.DataTextField = "name";
                ddlJobs.DataValueField = "id";
                ddlJobs.DataSource = dataService.GetJobs();
                ddlJobs.SelectedValue = selectedJobId.ToString();
                ddlJobs.DataBind();

                ddlJobs.DataBound += (o, args) =>
                    {
                        selectedJobId = Convert.ToInt32(ddlJobs.SelectedValue);
                        FillTable();
                    };
            }
           
            Page.DataBind();
        }
        
        protected void gridEmployees_RowEditing(object sender, GridViewEditEventArgs e)
        {
            gridEmployees.EditIndex = e.NewEditIndex;
            FillTable();
         }
        protected void gridEmployees_RowCancelingEdit(object sender,
                                  GridViewCancelEditEventArgs e)
        {
            gridEmployees.EditIndex = -1;
            FillTable();
        }

        protected void ddlJobs_SelectedIndexChanged(object sender, EventArgs e)
        {
            selectedJobId = Convert.ToInt32(((DropDownList)sender).SelectedValue);
            FillTable();
        }

        protected void FillTable()
        {
            gridEmployees.DataSource = GetEmployees();
            gridEmployees.DataBind();

            this.SalaryReadonly = !gridEmployees.SalaryEditable;
        }

         protected void grdView_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gridEmployees.DataSource = GetEmployees();
            gridEmployees.PageIndex = e.NewPageIndex;
            gridEmployees.DataBind();
        }

        protected void gridEmployees_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            
        }

        protected void tbSalary_TextChanged(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

      
    }
Точки останова или NotImplemented нигде не срабатывает. Как мне в таком случае при потере фокуса с текст-бокса обработать изменения?
С наилучшими пожеланиями.
Познающий вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновить данные в DataGridView. Как верно? Genco Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 20.04.2011 08:23
Вывести данные из строки в GridView Shouldercannon Общие вопросы Delphi 0 09.07.2010 19:19
Обновить данные в DBGRID sl963 БД в Delphi 7 04.06.2010 18:06
как Microsoft Access(ADOConnection ADOTable DataSource DBGrid) переделать под mySQL? Levsha100 БД в Delphi 6 23.05.2009 19:48
Как обновить GridView после изменения SELECT в SqlDataSource? posdnyaa БД в Delphi 2 21.04.2008 11:55