Gridview RowDataBound не работает, когда я остаюсь на той же странице и нажимаю кнопку поиска - PullRequest
0 голосов
/ 18 октября 2018

В качестве заголовка у меня есть код для добавления ключевых слов 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 Ответ

0 голосов
/ 18 октября 2018

Не могли бы вы сначала добавить 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;
    }
}
...