试图在后面的代码中从ItemDataBound中找到InsertItemTemplate内的一个按钮

时间:2016-04-30 13:41:48

标签: c# asp.net listview

我目前正在尝试从后面的代码中找到InsertItemTemplate中的插入按钮。基本上,如果计数达到10或更多,我试图使这个按钮的可见性为假。我一直得到空引用异常错误,所以我假设它没有找到按钮。我已经粘贴了以下代码背后的代码:

protected void externalLinksList_ItemDataBound(object sender, ListViewItemEventArgs e)
{

        String connectionString = WebConfigurationManager.ConnectionStrings["UniString"].ConnectionString;
        SqlConnection myConnection = new SqlConnection(connectionString);

        myConnection.Open();

        String linkCountQuery = "SELECT COUNT(id) FROM links";

        SqlCommand linkCountQueryCommand = new SqlCommand(linkCountQuery, myConnection);
        Int32 linkCountQueryCommandValue = (Int32)linkCountQueryCommand.ExecuteScalar();

        if (linkCountQueryCommandValue >= 10)
        {
            Button InsertButton = (Button)e.Item.FindControl("InsertButton") as Button;
            InsertButton.Visible = false;
            Label linkLimit = (Label)e.Item.FindControl("linkLimit") as Label;
            linkLimit.Visible = true;
            linkLimit.Text = "Up to 10 external links are permitted. Please delete links before adding any more.";

        }
        else
        {
            Button InsertButton = (Button)e.Item.FindControl("InsertButton");
        }
    }

1 个答案:

答案 0 :(得分:0)

您已经执行了一次查询以生成要显示的项目列表,并且您将ListView绑定到该数据源。此时,您可以检查数据源的任何内容,以确定它包含的项目数。我不会重复该查询 - 返回数据库 - 为显示的每个项目重新获得相同的数字。

有几种方法可以做到这一点。最简单的可能是

  • 当您执行初始查询以填充ListView时,获取该集合中的项目数。 (无论你在哪里为DataSource指定ListView,都要这样做。)
  • 将其存储在变量
  • externalLinksList_ItemDataBound中检查该变量 - 列表中项目的原始计数 - 并使用它来确定是否显示或隐藏按钮。

您也可以直接从DataSource检查externalLinksList_ItemDataBound。 例如,如果数据源是您可以执行的任何类型的列表

var listView = (ListView)sender;
var dataSource = (IList)listView.DataSource;
if(dataSource.Count >= 10)
{
    //etc. 
}

可能有一个更优雅的解决方案,涉及在ListView本身设置一个属性来禁用该按钮,但这样就可以了。