首页 > 解决方案 > 数据未绑定到 C# ListView(第二次尝试后)

问题描述

我正在尝试使用 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() 方法,但永远不会绑定数据。

任何人都知道为什么这会失败?

标签: c#asp.netlistviewdata-binding

解决方案


绑定数据后,我不得不移动隐藏/显示控件。它现在有效:

if (bValid)
                {
                    bindData();                 

                    lstAuthorizations.FindControl("cColumn").Visible = true;

推荐阅读