ListView不刷新,怎么办

flyforfei 2011-08-23 07:42:03
就是一个ListView绑定到ObjectDataSource,使用数据源和DataPager
分页,绑定过程没有问题 愿意看的自己看看

现在问题来了,插入一条记录后,ListView不显示出新插入的记录来,必须回发后才显示,其他几个不分页的ListView都正常,所以怀疑是分页的问题


<asp:ObjectDataSource ID="ODSMoneyOut" runat="server"
DataObjectTypeName="CenterCourt.Money" DeleteMethod="DeleteToManage"
InsertMethod="InsertToManage" SelectMethod="SelectToManage" SelectCountMethod="CountToManage"
TypeName="CenterCourt.Business.Money" UpdateMethod="UpdateToManage"
ConflictDetection="CompareAllValues" OldValuesParameterFormatString="oldMoney"
EnablePaging="True">
<SelectParameters>
<asp:ControlParameter ControlID="DDLYearOut" Name="year"
PropertyName="SelectedValue" Type="String" />
<%-- <asp:Parameter Name="startRowIndex" Type="Int32" />
<asp:Parameter Name="maximumRows" Type="Int32" />--%>
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="oldMoney" Type="Object" />
<asp:Parameter Name="newMoney" Type="Object" />
</UpdateParameters>
</asp:ObjectDataSource>
<h2>
<asp:Label ID="YearOut" runat="server" Font-Size="XX-Large" ForeColor="Red"></asp:Label>
案款发放维护</h2>
<asp:Label ID="Label5" runat="server" Text="选择年度:"></asp:Label>
<asp:DropDownList ID="DDLYearOut" runat="server" AutoPostBack="True" onselectedindexchanged="DDLYearOut_SelectedIndexChanged"
>
</asp:DropDownList>
<hr />
<asp:ListView ID="ListView4" runat="server" DataSourceID="ODSMoneyOut"
EnableModelValidation="True" InsertItemPosition="LastItem"
ondatabound="ListView4_DataBound" DataKeyNames="编号,Version">
<InsertItemTemplate>
<tr style="">
<td>
<asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="插入" ValidationGroup="lv41" />
<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="清除" />
</td>
<td>
<asp:Calendar ID="通知时间Calendar" runat="server" SelectedDate='<%# Bind("通知时间") %>' VisibleDate='<%# Eval("通知时间") %>' />
</td>
<td>
<asp:TextBox ID="案号TextBox" runat="server" Text='<%# Bind("案号") %>' MaxLength="20" Width="60px" ValidationGroup="lv41"/>
</td>
<td>
<asp:TextBox ID="权利人TextBox" runat="server" Text='<%# Bind("权利人") %>' MaxLength="50" Width="125px" ValidationGroup="lv41"/>
</td>
<td>
<asp:TextBox ID="金额TextBox" runat="server" Text='<%# Bind("金额") %>' Width="125px" ValidationGroup="lv41"/>
</td>
<td>
<asp:TextBox ID="单据号TextBox" runat="server" Text='<%# Bind("单据号") %>' Width="125px" MaxLength="30"/>
</td>
</tr>
</InsertItemTemplate>
<ItemTemplate>
<tr style="background-color: #E0FFFF;color: #333333;">
<td>
<asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="删除" />
<asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="编辑" />
</td>
<td>
<asp:Label ID="通知时间Label" runat="server" Text='<%# ((DateTime)Eval("通知时间")).ToShortDateString() %>' />
</td>
<td>
<asp:Label ID="案号Label" runat="server" Text='<%# Eval("案号") %>' />
</td>
<td>
<asp:Label ID="权利人Label" runat="server" Text='<%# Eval("权利人") %>' />
</td>
<td>
<asp:Label ID="金额Label" runat="server" Text='<%# Eval("金额") %>' />
</td>
<td>
<asp:Label ID="单据号Label" runat="server" Text='<%# Eval("单据号") %>' />
</td>
</tr>
</ItemTemplate>
............
</asp:ListView>

隐藏代码

protected void DDLYearOut_SelectedIndexChanged(object sender, EventArgs e)
{
YearOut.Text = DDLYearOut.SelectedValue;
HttpContext.Current.Cache.Remove("MoneyCount");
}

protected void ListView4_DataBound(object sender, EventArgs e)
{
Calendar calInform = ListView4.InsertItem.FindControl("通知时间Calendar") as Calendar;

if (calInform != null)
{
calInform.SelectedDate = DateTime.Now.Date;
}
}

DAL

namespace CenterCourt.Business
{
public class Money
{
public static IEnumerable<CenterCourt.Money> Search(string year,bool checkYear,string caseNumber,bool checkCaseNumber,string name,bool checkName,string noteNumber,bool checkNoteNumber)
{
LinqDataContext lDC = new LinqDataContext();
int y = int.Parse(year);
IEnumerable<CenterCourt.Money> query = null;
if (checkYear)
{
if(checkCaseNumber)
query = from r in lDC.Money where r.通知时间.Year == y && r.案号.EndsWith(caseNumber) select r;
else if(checkName)
query = from r in lDC.Money where r.通知时间.Year == y && r.权利人.Contains(name) select r;
else if(checkNoteNumber)
query = from r in lDC.Money where r.通知时间.Year == y && r.单据号.Contains(noteNumber) select r;
else
query = from r in lDC.Money where r.通知时间.Year == y select r;
}
else
{
if(checkCaseNumber)
query = from r in lDC.Money where r.案号.EndsWith(caseNumber) select r;
else if(checkName)
query = from r in lDC.Money where r.权利人.Contains(name) select r;
else if(checkNoteNumber)
query = from r in lDC.Money where r.单据号.Contains(noteNumber) select r;
else
query = from r in lDC.Money select r;
}
return query;
}
public static IEnumerable<CenterCourt.Money> SelectToManage(string year,int startRowIndex, int maximumRows)
{
LinqDataContext lDC = new LinqDataContext();
int y = int.Parse(year);
IEnumerable<CenterCourt.Money> query = null;
query = from r in lDC.Money where r.通知时间.Year == y select r;
return query.Skip(startRowIndex).Take(maximumRows);
}

public static int CountToManage(string year)
{
HttpContext hContext=HttpContext.Current;
if (hContext.Cache["MoneyCount"] == null)
{
LinqDataContext lDC = new LinqDataContext();
int y = int.Parse(year);
int count=lDC.Money.Where(r=>r.通知时间.Year==y).Count();
hContext.Cache["MoneyCount"] = count;
}
return (int)hContext.Cache["MoneyCount"];
}

public static string InsertToManage(CenterCourt.Money ObjToInsert)
{
LinqDataContext lDC = new LinqDataContext();

lDC.Money.InsertOnSubmit(ObjToInsert);
lDC.SubmitChanges();
return ObjToInsert.案号;
}

public static void UpdateToManage(CenterCourt.Money oldMoney, CenterCourt.Money newMoney)
{
LinqDataContext lDC = new LinqDataContext();
lDC.Money.Attach(newMoney, oldMoney);
lDC.SubmitChanges();
}

public static void DeleteToManage(CenterCourt.Money MoneyToDelete)
{
LinqDataContext lDC = new LinqDataContext();
lDC.Money.Attach(MoneyToDelete);
lDC.Money.DeleteOnSubmit(MoneyToDelete);
lDC.SubmitChanges();
}
}
...全文
359 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyforfei 2011-08-25
  • 打赏
  • 举报
回复
已经解决,谢谢各位了

原来是数据源CountMethod使用的Cache没有刷新
赢在执行 2011-08-23
  • 打赏
  • 举报
回复
我一般绑定到这里

protected void Page_PreRender(object sender, EventArgs e)
{
ListView .DataSource = xxx;
ListView .DataBind();
}
flyforfei 2011-08-23
  • 打赏
  • 举报
回复
重新绑定吗 不知道应该在哪个事件里

在ItemInserted中试过,不管用
ycproc 2011-08-23
  • 打赏
  • 举报
回复
重新 bind 或者调用
子夜__ 2011-08-23
  • 打赏
  • 举报
回复
插入一条记录后
把你的ListView从新绑定一下。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧