该页面将打开一个网格,供用户加载以编辑/删除数据。LoadGrid()
位于!IsPostBack
。
private void LoadGrid()
{
try
{
using (var db = new dbDataContext())
{
var loadGrid = from t in db.tbl_Providers
where t.provider_Deleted == false
orderby t.provider_Name.ToLower()
select new
{
t.ProviderId,
t.provider_Name,
};
grd_Provider.DataSource = loadGrid;
grd_Provider.DataBind();
}
// Set value of Edit/Delete columns on grid
// ========================================
grd_Provider.HeaderRow.Cells[0].Text = "Edit/Update";
grd_Provider.HeaderRow.Cells[1].Text = "Delete";
}
catch (SystemException ex)
所有这些代码都运行良好。 我要做的是显示字母表,用户点击链接,然后重新加载新查询并加载网格。
据我所知,字母表工作正常。我在Page_Load
上加载了代码,而Void方法则在页面的下方。
for (char asciiValue = 'A'; asciiValue <= 'Z'; asciiValue++)
{
LinkButton lnkCharacter = new LinkButton();
lnkCharacter.ID = "lnkCharacter" + asciiValue;
lbl_Alphabet.Controls.Add(lnkCharacter);
lnkCharacter.CommandArgument = Convert.ToString(asciiValue);
lnkCharacter.Command += lnkCharacter_Command;
lnkCharacter.Text = Convert.ToString(asciiValue) + " ";
}
void lnkCharacter_Command(object sender, CommandEventArgs e)
{
try
{
var lbtn = (LinkButton) lbl_Alphabet.FindControl("lnkCharacter" + e.CommandArgument);
var id = lbtn.Text;
using (var db = new dbDataContext())
{
var query = from n in db.tbl_Providers
where n.provider_Name.StartsWith(id) && n.provider_Deleted == false
select new
{
id = n.ProviderId,
name = n.provider_Name
};
grd_Provider.DataSource = query;
grd_Provider.DataBind();
}
}
catch (SystemException ex)
{
var exceptionUtility = new genericExceptions();
exceptionUtility.genericSystemException(
ex,
Server.MachineName,
Page.TemplateSourceDirectory.Remove(0, 1) + Page.AppRelativeVirtualPath.Remove(0, 1),
ConfigurationManager.AppSettings["emailSupport"],
ConfigurationManager.AppSettings["emailFrom"],
string.Empty);
}
}
我已经在LINQPad中测试了查询,它可以工作并返回结果。
当我在页面上运行它并逐步完成Datasource = query
说expanding the results will enumerate the query
时。
我这样做..
Enumeration yielded no results
页面重新加载,网格永远不显示?
是否与页面加载时加载的原始网格有关,还有一些有冲突?
我已将我的字母更改为IsPostBack
并且页面重新加载并且字母表消失,网格仍然正常加载。字母查询是否需要不同的gridview?
答案 0 :(得分:1)
这就是我的样子:
您有以下代码:
lnkCharacter.Text = Convert.ToString(asciiValue) + " ";
然后你有这个代码:
var lbtn = (LinkButton) lbl_Alphabet.FindControl("lnkCharacter" + e.CommandArgument);
var id = lbtn.Text;
最后,你有这个代码:
var query = from n in db.tbl_Providers
where n.provider_Name.StartsWith(id) && n.provider_Deleted == false
select new
{
id = n.ProviderId,
name = n.provider_Name
};
当您进入LINQ查询时, id 的值将在末尾有一个空格。因此,如果您点击“A”链接按钮,则不会搜索以"A"
开头的所有内容,而是搜索以"A "
开头的所有内容。
您需要在检索时调整lbtn.Text
,或使用其他方法确保字母超链接之间的空格,例如在添加链接按钮之间添加Literal
实例。