如何使用List DataSource从ItemTemplate中的TextBox更新GridView

时间:2014-08-26 11:06:33

标签: c# asp.net gridview

我被困了,不知道该怎么做,你能帮帮我吗?

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

<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(salary)。当用户编辑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时,该行会引发更新事件,但不幸的是,它没有,可能它会导致网格不在editMode中。所以,我只是做了一个解决方法 - 如果TB编辑 - 提出事件并处理它。

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

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

1 个答案:

答案 0 :(得分:0)

只需阅读本文。您将能够从gridview中的文本框中触发textchanged事件 [http://www.codeproject.com/Tips/663684/Fire-TextBox-TextChanged-Event-from-GridView][1]