我的查找控件未在gridview项模板中找到标签,有什么主意我该如何解决?

时间:2019-02-05 09:31:51

标签: c# asp.net gridview findcontrol

即使在本页面中,我也尝试使用与我多次使用的相同技术将值附加到我的gridview的标签上,但是find控件找不到标签。有谁知道为什么会这样吗?从我完成的研究中,我发现在某些情况下,一个项目模板中有2个标签会导致此问题,但在某些情况下却不会。

Gridview:

Label lblSD = (Label)e.Row.FindControl("lblStockDetailsS");
        lblSD.Text = Sline.StockDetailsS;

Label lblSD2 = (Label)e.Row.FindControl("lbl7");
        lblSD2.Text = Sline.NLocalStock;

后面的代码:

       if (text == "")
            {
                lblTexte.Text = "";
                lblCompteur.Text = "";
                for (int i = 0; i < dgv.Rows.Count - 1; i++)
                {
                dgv.Rows[i].Selected = false;
            }
            return;
        }
        if (dgv.RowCount < 1)
        {
            return;
        }
        else
        {
            DataTable d = new DataTable();
            lblTexte.Text = "Champ répondant au critère: ";
            tbx.SelectionStart = text.Length;
            tbx.Text = text.ToUpper();
            if ((dgv.DataSource.GetType()).Equals(typeof(DataView)))
            {
                d = ((DataView)dgv.DataSource).Table;
            }
            else
            {
                d = dgv.DataSource as DataTable;
            }
            DataRow[] row = d.Select("Champ like '%" + text + "%'");
            List<int> listeIndex = new List<int>();
            for (int i = 0; i < dgv.Rows.Count - 1; i++)
            {
                foreach (DataRow r in row)
                {
                    if (((DataRowView)dgv.Rows[i].DataBoundItem).Row == r)
                    {
                        dgv.Rows[i].Selected = true;
                        listeIndex.Add(i);
                    }
                    else if (!listeIndex.Contains(i))
                    {
                        dgv.Rows[i].Selected = false;
                    }
                }

            }
        }
        if (dgv.SelectedRows.Count != 0)
        {
            dgv.FirstDisplayedScrollingRowIndex = dgv.SelectedRows[0].Index;
        }
        if (dgv.SelectedRows.Count == 0 && text == "")
        {
            lblCompteur.Text = "";
        }
        else
        {
            lblCompteur.Text = dgv.SelectedRows.Count.ToString();
        }

1 个答案:

答案 0 :(得分:2)

  • RowDataBound事件将在网格中的每一行上触发。
  • 在找到数据行中可用的控件之前,请检查当前行是标题行还是数据行。
  • 在这种情况下保留代码块。

    if(e.Row.RowType == DataControlRowType.DataRow)

参考:https://techpattarai.com/findcontrol-onrowdatabound-csharp/

谢谢