我目前正在尝试从后面的代码中找到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");
}
}
答案 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
本身设置一个属性来禁用该按钮,但这样就可以了。