Asp.net 当文本框值与特定Gridview列值匹配时,更改Gridview行的颜色

Asp.net 当文本框值与特定Gridview列值匹配时,更改Gridview行的颜色,asp.net,gridview,Asp.net,Gridview,我有一个条形码扫描仪,当我扫描任何一个框时,那个特定的“BoxID”就在我的文本框中。因此,当我单击enter时,它应该检查GridView中特定的BoxID,并为整行着色。检查下面的屏幕截图 我使用了RowDataBound函数来更改颜色,但是当GridView数据绑定时,此函数只运行一次 我的行数据绑定代码: protected void GridView2_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEv

我有一个条形码扫描仪,当我扫描任何一个框时,那个特定的“
BoxID
”就在我的文本框中。因此,当我单击enter时,它应该检查GridView中特定的
BoxID
,并为整行着色。检查下面的屏幕截图

我使用了
RowDataBound
函数来更改颜色,但是当GridView数据绑定时,此函数只运行一次

我的行数据绑定代码:

protected void GridView2_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // determine the value of the UnitsInStock field

        string myBoxId = (DataBinder.Eval(e.Row.DataItem, "BoxID")).ToString();
        if (myBoxId == TextBox1.Text)
        {
            e.Row.BackColor = System.Drawing.Color.Yellow;
        }
    }
} 
这段代码是正确的,但正如我所说的,它只在gridview数据绑定时发生

因此,我尝试调用TextBox1_TextChanged中的RowDataBond

protected void TextBox1_TextChanged(object sender, EventArgs e)
{
    GridView2.RowDataBound += new GridViewRowEventHandler(GridView2_RowDataBound);

}
连它都没用

所以我想在textbox.textchanged内编写一个类似RowDataBound的方法。我也尝试过,但他们使用了“e”,这是一个
GridViewRowEventArgs
。那么,如何在textbox.textchanged中调用这个“e”,类似于“
Gridview2.Row.RowType
”而不是ASP.NET中的“
e.Row.RowType

这就是我的屏幕的样子


有什么想法吗?

您可以像这样在gridview行中循环:-

protected void TextBox1_TextChanged(object sender, EventArgs e)
{
    foreach (GridViewRow row in GridView2.Rows)
    {
        if (row.Cells[1].Text == txtBarCode.Text)
        {
            row.BackColor = System.Drawing.Color.Yellow;
            break;
        }
    }
}
$(document).ready(function () {
      $("#btnSearch").click(function (e) {
           e.preventDefault();
           var enteredText = $("#txtBarCode").val();
           var gridview = $('#GridView2');
           $('tr', gridview).each(function () {
                var parentRow = $(this);
                if ($('td:nth-child(2)', parentRow).text() == enteredText)
                {
                    parentRow.css("background-color", "yellow");
                    return false;
                }
         });
    });
});
更新:

如果您不想重新加载页面,那么可以在客户端使用jQuery这样做:-

protected void TextBox1_TextChanged(object sender, EventArgs e)
{
    foreach (GridViewRow row in GridView2.Rows)
    {
        if (row.Cells[1].Text == txtBarCode.Text)
        {
            row.BackColor = System.Drawing.Color.Yellow;
            break;
        }
    }
}
$(document).ready(function () {
      $("#btnSearch").click(function (e) {
           e.preventDefault();
           var enteredText = $("#txtBarCode").val();
           var gridview = $('#GridView2');
           $('tr', gridview).each(function () {
                var parentRow = $(this);
                if ($('td:nth-child(2)', parentRow).text() == enteredText)
                {
                    parentRow.css("background-color", "yellow");
                    return false;
                }
         });
    });
});

这里,
btnSearch
是您按钮的id。

我想您正在寻找这个,谢谢,但不,这只是选择了与textbox值相关的所有值,但我想给父行上色,我的id是唯一的。您想给整行上色吗?是的,当textbox值与网格视图Boxidy匹配时,您可以将foreach()放在TextBox1_TextChanged事件中的GridviewRow,并循环进行适当匹配,然后更改该行的颜色。谢谢。这很好用,但是Textbox1.TextChanged会刷新页面,所以我在按钮内调用了相同的方法…@Anirudh-哪个按钮?无论如何,这些服务器控件将执行按钮或文本框的回发。如果你不想这样做,最好使用Javascript。我在文本框前面使用了单独的按钮。Yea按钮将只调用它的特定方法,在textbox中,它调用pageload方法,该方法将刷新。无论如何,非常感谢。。信息技术worked@Anirudh-嘿,不,你的轻描淡写是错误的。回发是回发,即使对于您的按钮,单击
页面加载
事件也会触发,之后,您的按钮单击事件也会触发。所以重新加载发生了。您可以使用客户端代码来避免这种情况。请检查我的更新。是的,你是正确的,但在我的代码中,我正在为同一个按钮执行其他过程,正如你所说的abt postback,我的意思是在文本框中,在文本更改后,postback返回另一个按钮,它会重新加载页面。是的,右回发发生在特定代码运行之前,我说的是在特定代码运行之后,在按钮中不会,在文本框中文本更改了执行的代码量,为什么刷新我的页面而没有值。