我正在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
{
}
}
- 感谢
答案 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
}
}