C# Asp.net无法识别我的用户控件

C# Asp.net无法识别我的用户控件,c#,.net,user-controls,C#,.net,User Controls,我已经在可编辑的GridView中编写了一个用户控件。以下是设计中控件的代码(文件:editableGridView.ascx) 下面是代码:(文件:editableGridView.ascx.cs) 使用系统; 使用System.Collections.Generic; 使用System.Linq; 使用System.Web; 使用System.Web.UI; 使用System.Web.UI.WebControl; 使用系统数据; 使用System.Data.Sql; 使用System.D

我已经在可编辑的GridView中编写了一个用户控件。以下是设计中控件的代码(文件:editableGridView.ascx)


下面是代码:(文件:editableGridView.ascx.cs)

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
使用系统数据;
使用System.Data.Sql;
使用System.Data.SqlClient;
命名空间WebApplication1
{
公共分部类EditableGridView:System.Web.UI.UserControl
{
公共字符串connstr{get;set;}
公共字符串表名{get;set;}
公共字符串selectcmd{get;set;}
私有列表字段;
私有连接;
受保护的无效页面加载(对象发送方、事件参数e)
{
}
公共void InitGrid(字符串connstr,字符串tablename)
{
con=新的SqlConnection(connstr);
con.Open();
使用(SqlCommand cmd=new SqlCommand())
{
cmd.Connection=con;
cmd.CommandText=“选择*自”+表名;
使用(SqlDataReader rd=cmd.ExecuteReader())
{
如果(!rd.HasRows)返回;
字段=新列表();
对于(int i=0;i
现在,在我要放置控件的页面中,我写道:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="WebApplication1.WebForm2" %>
<%@ Register TagPrefix="mygrids" TagName="EditableGridView" Src="editableGridView.ascx"%>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
           <mygrids:EditableGridView ID="edgv1"></mygrids:EditableGridView>
        </div>
    </form>
</body>
</html>

但EditableGridView下有一个绿色标记,提示是:“元素EditableGridView未知。问题可能是由于网站的编译错误或web.config文件丢失。”


这里有什么帮助或想法吗?

ascx和aspx在哪些文件夹中?这意味着页面找不到您的控件,您是否用控件的正确路径更新了Src属性?编译解决了问题。我在运行时发现了几个bug,谢谢你的关注。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;

namespace WebApplication1
{


    public partial class EditableGridView : System.Web.UI.UserControl
    {
        public string connstr { get; set; }
        public string tablename { get; set; }
        public string selectcmd { get; set; }
        private List<EdField> fields;

        private SqlConnection con;

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        public void InitGrid(string theconnstr, string tablename)
        {
            con = new SqlConnection(connstr); 
            con.Open();
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = con;
                cmd.CommandText = "SELECT * FROM " + tablename;
                using (SqlDataReader rd = cmd.ExecuteReader())
                {
                    if (!rd.HasRows) return;
                    fields = new List<EdField>();
                    for (int i =0; i < rd.FieldCount; i++)
                    {
                        fields.Add(new EdField(rd.GetName(i), rd.GetDataTypeName(i)));
                    }
                }
            }
        }

        public void Bind()
        {
            con.Open();
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = con;
                cmd.CommandText = selectcmd;
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    using (DataTable dt = new DataTable())
                    {
                        da.Fill(dt);
                        EditableGrid.DataSource = dt;
                        EditableGrid.DataBind();
                        EditableGrid.Visible = true;
                    }
                }
            }
            con.Close();
        }


        protected void EditableGrid_RowEditing(object sender, GridViewEditEventArgs e)
        {
            EditableGrid.EditIndex = e.NewEditIndex;
            Bind();
        }

        protected void EditableGrid_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            EditableGrid.EditIndex = -1;
            Bind();
        }

        protected void EditableGrid_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {

               GridViewRow row = (GridViewRow)EditableGrid.Rows[e.RowIndex];
            List<TextBox> tbs = new List<TextBox>();
            for (int i = 1; i < fields.Count; i++)
            {
                tbs.Add((TextBox)row.FindControl("textbox" + i.ToString()));
            }


            EditableGrid.EditIndex = -1;


            String sql = "UPDATE " + tablename + "SET " ;
            for (int i = 1; i < fields.Count; i++)
            {
                sql += fields[i].Name;
                sql += " = ";
                sql += ProperFormatField(fields[i].DataTypeName, tbs[i].Text);
                if (i < fields.Count - 1)
                {

                    sql += " , ";
                }
            }

            Label lbl = (Label)row.FindControl("lblid");
            sql += " WHERE " + fields[0].Name + " = " + lbl.Text;

            con.Open();
            SqlCommand cmd = new SqlCommand(sql, con);

            cmd.ExecuteNonQuery();
            con.Close();


            Bind();

        }

        protected void EditableGrid_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            GridViewRow row = (GridViewRow)EditableGrid.Rows[e.RowIndex];
            Label lbl = (Label)row.FindControl("lblid");


            String sql = "DELETE " + tablename;
            sql += " WHERE " + fields[0].Name + " = " + lbl.Text;

            con.Open();
            SqlCommand cmd = new SqlCommand(sql, con);
            cmd.ExecuteNonQuery();
            con.Close();

            Bind();
           /* */
        }

        private String ProperFormatField(String dtf, String s)
        {
            if (
                (dtf == "CHAR") ||
                (dtf == "VARCHAR") ||
                (dtf == "NVARCHAR") ||
                (dtf == "NCHAR") ||
                (dtf == "DATE") ||
                (dtf == "DATETIME") ||
                (dtf == "DATETIME2")

                )
            {
                return "'" + s + "'";
            }
            else
                return s;

        }
    }

    public class EdField
    {
        private String myName;
        private String myDataTypeName;

        public String Name
        {
            get { return myName; }
            set { myName = value; }
        }

        public String DataTypeName
        {
            get { return myDataTypeName; }
            set { myDataTypeName = value; }
        }





        public EdField(String theName, String theDataTypename)
        {
            myName = theName;
            myDataTypeName = theDataTypename.ToUpper();
        }
    }
}
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="WebApplication1.WebForm2" %>
<%@ Register TagPrefix="mygrids" TagName="EditableGridView" Src="editableGridView.ascx"%>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
           <mygrids:EditableGridView ID="edgv1"></mygrids:EditableGridView>
        </div>
    </form>
</body>
</html>