将动态文本框与Gridview中的另一列进行比较

时间:2016-11-04 04:38:58

标签: c# asp.net gridview

我正在gridview中创建一个动态文本框。在textchange上,我想将值与同一网格中的另一列进行比较。我的代码如下。

我怀疑的是,如何在TextChanged中获得第二个值进行比较。

             if (e.Row.RowType == DataControlRowType.DataRow)
        {
            TextBox txt = new TextBox();
            txt.ID = "txt";
            txt.Text = e.Row.Cells[7].Text;
            txt.AutoPostBack = true;
            txt.TextChanged += new EventHandler(Txt_TextChanged);
            e.Row.Cells[7].Controls.Add(txt);
        }

   private void Txt_TextChanged(object sender, EventArgs e)
    {
        TextBox txtBox = sender as TextBox;
        if (!string.IsNullOrEmpty(txtBox.Text) && txtBox.Text.All(Char.IsDigit))
        { 

//Here I want to get the gridview's 6th column(gridview.row[i].cells[6].text)
        }
        else
        {

        }
        }

- 感谢

3 个答案:

答案 0 :(得分:1)

如果其中一个Cells可以为null,我会使用.Equals()或object.Equals(editedCell,otherCell)。

private void Txt_TextChanged(object sender, EventArgs e){
        TextBox txtBox = sender as TextBox;
        if (!string.IsNullOrEmpty(txtBox.Text) && txtBox.Text.All(Char.IsDigit))
        {
            if(object.Equals(gridview.row[i].cells[6].text, txtBox.Text))
            {
                //Equal
            }
        }
}

答案 1 :(得分:0)

如果你知道细胞指数,那就容易多了。在这里,我比较了编辑的单元格和行中的单元格[1]。检查一下:

 private void myDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
         {
                var editedCell = 
myDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
                var otherCell =
 myDataGridView.Rows[e.RowIndex].Cells[1].Value.ToString();

                if (editedCell == otherCell)
                {
                    //equal
                }

               else
                   //not equal

         }

答案 2 :(得分:0)

首先,我建议不要在OnRowDataBound事件中动态添加TextBox,而是使用TemplateField。原因是文本框在PostBack之后会消失,为了让它们恢复,你需要再次调用DataBind()

<asp:TemplateField>
    <ItemTemplate>
        <asp:TextBox CssClass='<%# Container.DataItemIndex %>' runat="server" Text='<%# Eval("value") %>' OnTextChanged="TextBox1_TextChanged" AutoPostBack="true"></asp:TextBox>
    </ItemTemplate>
</asp:TemplateField>

现在我们可以在后面的代码中处理OnTextChanged事件。问题是获得正确的行号。为此,我“滥用”TextBox的CssClass属性(CssClass='<%# Container.DataItemIndex %>')。通过将行号设置为类,您可以在

后面的代码中轻松访问它
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
    TextBox textBox = sender as TextBox;

    int rowNumber = Convert.ToInt32(textBox.CssClass);
    string valueToCompare = GridView1.Rows[rowNumber].Cells[1].Text;

    if (textBox.Text == valueToCompare)
    {
        //do stuff
    }
}