我需要帮助错误信息找到了具有相同ID“txtid”的多个控件。 FindControl要求控件具有唯一ID。 [英] HI I need help Error message on Multiple controls with the same ID 'txtid' were found. FindControl requires that controls have unique IDs.

查看:60
本文介绍了我需要帮助错误信息找到了具有相同ID“txtid”的多个控件。 FindControl要求控件具有唯一ID。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的代码



MY code

<form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <div>
     <asp:GridView ID="gvAll" runat="server" 

    AutoGenerateColumns = "false" Font-Names = "Arial" 

    Font-Size = "11pt" AlternatingRowStyle-BackColor = "#C2D69B"  

    HeaderStyle-BackColor = "green" AllowPaging ="true"   

    OnPageIndexChanging = "OnPaging" PageSize = "10" >
   <Columns>
    <asp:TemplateField>
        <HeaderTemplate>
            <asp:CheckBox ID="chkAll" runat="server" onclick = "checkAll(this);" 

            AutoPostBack = "true"  OnCheckedChanged = "CheckBox_CheckChanged"/>
        </HeaderTemplate> 
        <ItemTemplate>
            <asp:CheckBox ID="chk" runat="server" onclick = "Check_Click(this)" 

            AutoPostBack = "true"  OnCheckedChanged = "CheckBox_CheckChanged" />
        </ItemTemplate>
    </asp:TemplateField> 
    <asp:BoundField DataField = "ConId" HeaderText = "Customer ID" 

     HtmlEncode = "false" />
    <asp:BoundField DataField = "Name" HeaderText = "Contact Name" 

    HtmlEncode = "false" />
    <asp:BoundField DataField = "CompanyName" HeaderText = "City" 

    HtmlEncode = "false" />
   </Columns> 
   <AlternatingRowStyle BackColor="#C2D69B"  />
</asp:GridView> 
            <br />
<asp:GridView ID="gvSelected" runat="server" 

AutoGenerateColumns = "false" Font-Names = "Arial" 

Font-Size = "11pt" AlternatingRowStyle-BackColor = "#C2D69B"  

HeaderStyle-BackColor = "green" EmptyDataText = "No Records Selected"  >
<Columns>
    <asp:TemplateField HeaderText="ID">
        <ItemTemplate>
            <asp:TextBox ID="txtid" runat="server" Text='<%#Eval("ConId") %>'></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>

    <asp:TemplateField HeaderText="Name">
        <ItemTemplate>
            <asp:TextBox ID="txtid" runat="server" Text='<%#Eval("Name") %>'></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>


    <asp:TemplateField HeaderText="Company">
        <ItemTemplate>
            <asp:TextBox ID="txtid" runat="server" Text='<%#Eval("CompanyName") %>'></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>


   <%-- <asp:BoundField DataField = "ConId" HeaderText = "Customer ID" />
    <asp:BoundField DataField = "Name" HeaderText = "Contact Name" />
    <asp:BoundField DataField = "CompanyName" HeaderText = "City" />--%>
 </Columns>
</asp:GridView>
        </div>
    </form>







 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindPrimaryGrid();
            BindSecondaryGrid();
        }
    }

    private void BindPrimaryGrid()
    {
        string constr = ConfigurationManager.ConnectionStrings["ConnectionDB"].ConnectionString;
        //string query = "select CustomerID, ContactName, City from customers";
        string query = "select ConId,Name,CompanyName from Contact";
        SqlConnection con = new SqlConnection(constr);
        SqlDataAdapter sda = new SqlDataAdapter(query, con);
        DataTable dt = new DataTable();
        sda.Fill(dt);
        gvAll.DataSource = dt;
        gvAll.DataBind();  
    }

protected void OnPaging(object sender, GridViewPageEventArgs e)
{
    GetData();
    gvAll.PageIndex = e.NewPageIndex;
    BindPrimaryGrid();
    SetData(); 
}

private void GetData()
{
    DataTable dt;
    if (ViewState["SelectedRecords"] != null)
        dt = (DataTable)ViewState["SelectedRecords"];
    else
        dt = CreateDataTable();
    CheckBox chkAll = (CheckBox)gvAll.HeaderRow
                        .Cells[0].FindControl("chkAll");
    for (int i = 0; i < gvAll.Rows.Count; i++)
    {
        if (chkAll.Checked)
        {
            dt = AddRow(gvAll.Rows[i], dt);
        }
        else
        {
            CheckBox chk = (CheckBox)gvAll.Rows[i]
                            .Cells[0].FindControl("chk");
            if (chk.Checked)
            {
                dt = AddRow(gvAll.Rows[i], dt);
            }
            else
            {
                dt = RemoveRow(gvAll.Rows[i], dt);
            }
        }
    }
    ViewState["SelectedRecords"] = dt;
}

    private void SetData()
    {
        CheckBox chkAll = (CheckBox)gvAll.HeaderRow.Cells[0].FindControl("chkAll");
        chkAll.Checked = true;
        if (ViewState["SelectedRecords"] != null)
        {
            DataTable dt = (DataTable)ViewState["SelectedRecords"];
            for (int i = 0; i < gvAll.Rows.Count; i++)
            {
                CheckBox chk = (CheckBox)gvAll.Rows[i].Cells[0].FindControl("chk");
                if (chk != null)
                {
                    DataRow[] dr = dt.Select("ConId = '" + gvAll.Rows[i].Cells[1].Text + "'");
                    chk.Checked = dr.Length > 0; 
                    if (!chk.Checked)
                    {
                        chkAll.Checked = false;
                    }
                }
            }
        }
    }

private DataTable CreateDataTable()
{
    DataTable dt = new DataTable();
    dt.Columns.Add("ConId");
    dt.Columns.Add("Name");
    dt.Columns.Add("CompanyName");
    dt.AcceptChanges();
    return dt;
}

private DataTable AddRow(GridViewRow gvRow, DataTable dt)
{
    DataRow[] dr = dt.Select("ConId = '" + gvRow.Cells[1].Text + "'");
    if (dr.Length <= 0)
    {
        dt.Rows.Add();

        for (int i = 0; i < gvAll.Rows.Count; i++)
        {

            dt.Rows[dt.Rows.Count - 1]["ConId"] = gvRow.Cells[2].Text;
            dt.Rows[dt.Rows.Count - 1]["Name"] = gvRow.Cells[2].Text;
            dt.Rows[dt.Rows.Count - 1]["CompanyName"] = gvRow.Cells[3].Text;
            dt.AcceptChanges();
        }
    }
    return dt;
}

private DataTable RemoveRow(GridViewRow gvRow, DataTable dt)
{
    DataRow[] dr = dt.Select("ConId = '" + gvRow.Cells[1].Text + "'");
    if (dr.Length > 0)
    {
        dt.Rows.Remove(dr[0]);
        dt.AcceptChanges();
    }
    return dt;
}

protected void CheckBox_CheckChanged(object sender, EventArgs e)
{
    GetData();
    SetData();
    BindSecondaryGrid();
}

private void BindSecondaryGrid()
{
    DataTable dt = (DataTable)ViewState["SelectedRecords"];
    gvSelected.DataSource = dt;
    gvSelected.DataBind(); 
}











错误消息



找到了具有相同IDtxtid的多个控件。 FindControl要求控件具有唯一ID。

推荐答案

错误信息看起来很清楚是什么问题。



解决方案:使用文本编辑器的搜索功能。



您应该学会使用文本编辑器。
Error message look pretty clear on what is the problem.

Solution: Use the Search function of your text editor.

You should really learn to use your text editor.


错误是不言自明的,你有三个txtid控件。将它们更改为具有唯一ID。
The error is self-explanatory, you have three txtid controls. Change them to have unique IDs.


这篇关于我需要帮助错误信息找到了具有相同ID“txtid”的多个控件。 FindControl要求控件具有唯一ID。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆