【问题标题】:How to update GridView from TextBox in ItemTemplate with List DataSource如何使用 List DataSource 从 ItemTemplate 中的 TextBox 更新 GridView
【发布时间】:2014-08-26 11:06:33
【问题描述】:

我被卡住了,不知道该怎么办,你能帮我吗?

我在页面标记中有这个网格

<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>

我想要两列 - 标签(姓名)和文本框(薪水)。当用户编辑 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();
    }

我认为当我更新 TextBox 时该行会引发更新事件,但不幸的是,它没有,可能是因为网格不在编辑模式中。所以,我只是做了解决方法——如果编辑了 TB——引发事件并处理它。

嗯,现在页面正在重新加载 IsPostback = false,但没有引发任何事件,不是 WebGrid 的,也不是 TB 的。

我找到了一些线索here,但我的来源不是 SqlDataSource。我的代码有什么问题,来源?在我的情况下,当 TB 发生变化时如何更新行。

【问题讨论】:

  • 事件“tbSalary_TextChanged”在哪里??
  • @SirajMansour 我在代码隐藏中拥有所有事件处理程序,它们仅用于断点是空的。好吧,看,现在属性是: OnTextChanged="tbSalary_TextChanged" AutoPostBack="True" 处理程序受保护 void tbSalary_TextChanged(object sender, EventArgs e) { throw new NotImplementedException(); } 但没有发生异常。只是 Page_Load 和 PostBack == false

标签: c# asp.net gridview


【解决方案1】:

只需浏览这篇文章。您将能够从 gridview 内的文本框中触发 textchange 事件 [http://www.codeproject.com/Tips/663684/Fire-TextBox-TextChanged-Event-from-GridView][1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多