【发布时间】: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