Как обновить GridView из TextBox в ItemTemplate с помощью List DataSource

1

Я застрял и понятия не имею, что делать, не могли бы вы мне помочь?

У меня есть эта сетка в разметке страницы

<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"
    OnRowUpdated="gridEmployees_RowUpdated"
    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" OnTextChanged="tbSalary_TextChanged" AutoPostBack="True" style="text-align: right" TextMode="SingleLine" runat="server" ID="tbSalary" Text='<%# Bind("Salary", "{0:c0}") %>'></asp:TextBox>
                </div>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Я хочу два столбца - label (name) и textBox (зарплата). Когда пользователь редактирует TextBox - данные должны обновляться автоматически.

Мой CodeBehind выглядит так:

    private static readonly DbManager DbManager = new DbManager();

    private int selectedJobId = 1; // TODO:

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

            ddlJobs.DataBound += (o, args) =>
                {
                    selectedJobId = Convert.ToInt32(ddlJobs.SelectedValue);
                    FillTable();
                };
        }
        else
        {
            selectedJobId = Convert.ToInt32(ddlJobs.SelectedValue);
        }
        Page.DataBind();
    }

    protected void FillTable()
    {
        gridEmployees.DataSource = GetEmployees(); // List<Employees>
        gridEmployees.DataBind();
    }

Я подумал, что строка обновит событие Update, когда я обновляю TextBox, но, к сожалению, это не так, вероятно, потому что сетка не находится в editMode. Итак, я просто сделал обходной путь - если TB отредактировал - поднять событие и обработать его.

Ну, теперь страница перезагружается с помощью IsPostback = false, но события не возникают, а не WebGrid, а не TB.

Я нашел некоторые подсказки здесь, но мой источник не SqlDataSource. Что случилось с моим кодом, источником? Как обновить строку, когда ТБ изменился в моем случае.

  • 0
    Где находится событие "tbSalary_TextChanged" ??
  • 0
    @SirajMansour У меня есть все обработчики событий внутри кода, они пусты только для точек останова. Итак, посмотрите, теперь свойство имеет вид: OnTextChanged = "tbSalary_TextChanged" AutoPostBack = "True" Обработчик защищен void tbSalary_TextChanged (отправитель объекта, EventArgs e) {throw new NotImplementedException (); } Но исключений не произошло. Просто Page_Load с PostBack == ложь
Теги:
gridview

1 ответ

0
Лучший ответ

Просто просмотрите это искусство. Вы сможете запустить событие textchange из текстового поля внутри gridview [ http://www.codeproject.com/Tips/663684/Fire-TextBox-TextChanged-Event-from-GridView][1]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню