Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#-从数据库读取时如何在用户控件中维护值?_C#_Asp.net_User Controls_Viewstate - Fatal编程技术网

c#-从数据库读取时如何在用户控件中维护值?

c#-从数据库读取时如何在用户控件中维护值?,c#,asp.net,user-controls,viewstate,C#,Asp.net,User Controls,Viewstate,我想在视图状态下维护用户控件值 我试过了,但是值被删除了 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { using (OleDbCommand cmd = new OleDbCommand("Select * from visa_details where emp_id = '" + empid + "'", DbConnection)) using (OleDbDataAdapter

我想在视图状态下维护用户控件值

我试过了,但是值被删除了

 protected void Page_Load(object sender, EventArgs e)
 {
 if (!IsPostBack)
 {
using (OleDbCommand cmd = new OleDbCommand("Select * from visa_details where emp_id = '" + empid + "'", DbConnection))
using (OleDbDataAdapter da = new OleDbDataAdapter(cmd))
{

  OleDbDataReader DR1 = cmd.ExecuteReader();
  while (DR1.Read())
  {
    string visaNumb = DR1[2].ToString();
    string visaCountry = DR1[3].ToString();
    string visaType = DR1[4].ToString();
    string visaEntry = DR1[5].ToString();
    string expiryDate = DR1[6].ToString();
    expiryDate =  DateTime.Parse(expiryDate).ToString("dd-MMM-yyyy", CultureInfo.InvariantCulture);

    VisaUserControl userconrol = (VisaUserControl)Page.LoadControl("VisaUserControl.ascx");
    userconrol.TextVisaNumber = visaNumb;
    userconrol.VisaCountry = visaCountry;
    userconrol.VisaType = visaType;
    userconrol.VisaEntry = visaEntry;
    userconrol.ExpiryDate = expiryDate;
    rpt1.Controls.Add(userconrol);
   }
  }
 }
}
代码:

在下面的代码中,我从数据库中读取值并将其加载到用户控件中,它正在工作,但如果我想在单击“添加”按钮时再添加一个用户控件,则这些值将被删除

 protected void Page_Load(object sender, EventArgs e)
 {
 if (!IsPostBack)
 {
using (OleDbCommand cmd = new OleDbCommand("Select * from visa_details where emp_id = '" + empid + "'", DbConnection))
using (OleDbDataAdapter da = new OleDbDataAdapter(cmd))
{

  OleDbDataReader DR1 = cmd.ExecuteReader();
  while (DR1.Read())
  {
    string visaNumb = DR1[2].ToString();
    string visaCountry = DR1[3].ToString();
    string visaType = DR1[4].ToString();
    string visaEntry = DR1[5].ToString();
    string expiryDate = DR1[6].ToString();
    expiryDate =  DateTime.Parse(expiryDate).ToString("dd-MMM-yyyy", CultureInfo.InvariantCulture);

    VisaUserControl userconrol = (VisaUserControl)Page.LoadControl("VisaUserControl.ascx");
    userconrol.TextVisaNumber = visaNumb;
    userconrol.VisaCountry = visaCountry;
    userconrol.VisaType = visaType;
    userconrol.VisaEntry = visaEntry;
    userconrol.ExpiryDate = expiryDate;
    rpt1.Controls.Add(userconrol);
   }
  }
 }
}
下面的代码用于在单击“添加”按钮时添加用户控件

    public List<string> NoOfControls
    {
        get
        {
            return ViewState["NoOfControls"] == null ? new List<string>() : (List<string>)ViewState["NoOfControls"];

        }
        set
        {
            ViewState["NoOfControls"] = value;
        }

    }


    protected override void LoadViewState(object savedState)
    {
        base.LoadViewState(savedState);

        GenerateControls();
    }



    private void GenerateControls()
    {
        foreach (string i in NoOfControls)
        {
            VisaUserControl ctrl = (VisaUserControl)Page.LoadControl("VisaUserControl.ascx");

            ctrl.ID = i;
            this.rpt1.Controls.Add(ctrl);
        }
    }

    protected void btnAddVisa_Click(object sender, EventArgs e)
    {

        List<string> temp = null;
        var uc = (VisaUserControl)this.LoadControl(@"VisaUserControl.ascx");

        string id = Guid.NewGuid().ToString();
        uc.ID = id;

        temp = NoOfControls;
        temp.Add(id);
        NoOfControls = temp;
        rpt1.Controls.Add(uc);
    }
公共列表NoOfControls
{
得到
{
返回ViewState[“NoOfControls”]==null?新建列表():(列表)ViewState[“NoOfControls”];
}
设置
{
ViewState[“NoOfControls”]=值;
}
}
受保护的覆盖无效LoadViewState(对象保存状态)
{
base.LoadViewState(savedState);
生成控件();
}
私有void GenerateControls()
{
foreach(NoOfControls中的字符串i)
{
VisaUserControl ctrl=(VisaUserControl)Page.LoadControl(“VisaUserControl.ascx”);
ctrl.ID=i;
this.rpt1.Controls.Add(ctrl);
}
}
受保护的无效btnAddVisa_单击(对象发送方,事件参数e)
{
列表温度=空;
var uc=(VisaUserControl)this.LoadControl(@“VisaUserControl.ascx”);
字符串id=Guid.NewGuid().ToString();
uc.ID=ID;
温度=无控制;
临时添加(id);
NoOfControls=温度;
rpt1.控件.添加(uc);
}
在下图中,如果我单击添加更多Visa按钮,这些值和控件将被删除,我希望保留这些值


有什么想法吗?提前感谢

事实上,当您单击按钮时,页面会进行回发,因此如果(!IsPostBack)条件未执行,则页面加载事件中
中的代码部分将不会执行


这包括创建动态创建的
VisaUserControl

为什么要问两次这个问题@SonerGönül:我投票赞成关闭另一个:)@PaoloTedesco,但这是新的一个
:)
这应该是关闭的一个。很抱歉发布twice@SonerGönül:我想我打开了两个标签,忘记了哪个是哪个,然后投票关闭了一个随机标签:)非常感谢你的回答