【发布时间】:2018-12-14 20:50:02
【问题描述】:
我正在尝试使用 ListView 从数据库中提取数据。如果该值存在,它会在第一次尝试时“工作”,但在搜索不存在的值然后再尝试使用任何其他值时会出现问题(即使该其他值确实存在)。
调试时,我注意到以下几点:
如果我搜索数据库中不存在的值,然后尝试搜索存在的值,调试器会直接从“bValid = true”行转到获取 Listview 数据的方法 (lstAuthorizations_GetData ())。相反,它应该转到 bindData。似乎它没有处理 bValid = true 行。为什么会在这里断掉?我尝试将行更改为其他变体,但无论它是什么,它似乎都没有按正确的顺序处理
代码:
else //default
{
if(string.IsNullOrEmpty(Search_ANumber) && string.IsNullOrEmpty(Search_MemberID))
{
bValid = false;
errorMsg = "Either A Number or M ID are required";
}
else
{
bValid = true;
lstAuthorizations.FindControl("cColumn").Visible = false; // if not in ActiveExceptions, hide column //may want to move this to Line 214
}
}
if (bValid)
{
bindData();
}
protected void bindData()
{
//removeTextBoxValues(); //remove values from Textboxes since you got a response from the DB
ShouldSearch = true;
panelSearchResults.Visible = true;
lstAuthorizations.DataBind();
}
ListView的getdata方法:
public IQueryable<Project.Data.databaseView> lstAuthorizations_GetData()
{
try
{
IQueryable<databaseView> query = dbVBA.databaseView.AsQueryable();
if (!String.IsNullOrEmpty(Search_AuthNumber))
{
query = query.Where(m => m.A_Number == Search_ANumber);
}
return query.OrderBy(a=>a.A_Number);
}
aspx:
<asp:ListView ID="lstAuthorizations" runat="server"
ItemPlaceholderID="litPlaceHolder"
ItemType="Project.Data.databaseView" SelectMethod="lstAuthorizations_GetData">
当它实际返回结果时,它似乎运行了两次从数据库获取数据的方法(它进入 lstAuthorizations_GetData() 方法,然后进入数据绑定,然后再次进入 lstAuthorizations_GetData() 方法) .在我尝试第二个值的情况下,它会转到 lstAuthorizations_GetData() 方法,但永远不会绑定数据。
有人知道为什么会失败吗?
【问题讨论】:
-
在哪里可以找到 lstAuthorizations_GetData() 方法?它在哪里打电话?我认为这个代码段不足以进行任何类型的分析。
-
我为此添加了代码。希望这就是你所指的。该 GetData 方法适用于 ListView。它在 SelectMethod= 的 ListView 中的 aspx 中被引用
标签: c# asp.net listview data-binding