Gridview RowDataBound не работает, когда я остаюсь на той же странице и нажимаю кнопку поиска
В качестве заголовка у меня есть код для добавления ключевых слов HyperLink и Highlight в RowDataBound. Это работает, когда страница изменяется, за исключением того, что остается на той же странице (нажмите searchbtn). Считается, что HyperLink будет разархивирован, но выделит работу в обычном режиме. Я пытаюсь написать в Rowcreated(), если я сделаю это, не только гиперссылка, но и содержимое будет уничтожено. Как я могу решить эту проблему? Благодарю.
Вот код
protected override void LoadViewState(object savedState)
{
if (savedState != null)
{
object[] myState = (object[])savedState;
if (myState[0] != null)
{
base.LoadViewState(myState[0]);
}
if (myState[1] != null)
{
SqlDataSource1.SelectCommand = Convert.ToString(myState[1]);
}
}
}
protected override object SaveViewState()
{
object baseSate = base.SaveViewState();
object[] myState = new object[2];
myState[0] = baseSate;
myState[1] = SqlDataSource1.SelectCommand;
return myState;
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string[] keywords = tbKeyWords.Text.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
this.keywords = keywords.ToList();
switch (DocRange.SelectedItem.Value)
{
case "all":
foreach (string item in this.keywords)
{
e.Row.Cells[1].Text = e.Row.Cells[1].Text.Replace(item, "<span style='background:#FF0;'>" + item + "</span>");
e.Row.Cells[2].Text = e.Row.Cells[2].Text.Replace(item, "<span style='background:#FF0;'>" + item + "</span>");
}
break;
case "parsecontent":
foreach (string item in this.keywords)
{
e.Row.Cells[2].Text = e.Row.Cells[2].Text.Replace(item, "<span style='background:#FF0;'>" + item + "</span>");
}
break;
case "filename":
foreach (string item in this.keywords)
{
e.Row.Cells[1].Text = e.Row.Cells[1].Text.Replace(item, "<span style='background:#FF0;'>" + item + "</span>");
}
break;
}
HyperLink Hyper = new HyperLink();
Hyper.Text = e.Row.Cells[1].Text;
Hyper.NavigateUrl = "" + e.Row.Cells[1].Text;
e.Row.Cells[1].Controls.Add(Hyper);
}
}
1 ответ
Не могли бы вы сначала добавить HyperLink в Gridview Control, как показано ниже.
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink runat="server" ID="myHyperLink"></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
HyperLink myHyperLink = e.Row.FindControl("myHyperLink") as HyperLink;
myHyperLink.Text = e.Row.Cells[1].Text;
myHyperLink.NavigateURL = e.Row.Cells[1].Text;
}
}