我正在从控制asp:SqlDataSource的角度来接近这个问题,这个控件绑定到formview中的控件,这是本主题的一部分,并且在没有得到快速的地方,所以我选择关闭该线程并在在formview中的控制级别,因为它似乎对我更有意义。
因此,对于背景以下代码旨在注入下面屏幕剪辑的前两行中列出的字符串值(以及包含的代码块底部的两个对应的Response.Write)。
我想要做的是,使用FindControl在这些项目的情况下设置Text值(但我有一些asp:复选框来处理完成后也需要相同的处理。)而现在我只关注这两个控件。第一个是asp:label
<asp:Label runat="server" ID="SubmitByLbl" Text='<%# Eval("SubmitBy") %>' ></asp:Label>
接下来是asp:TextBox:
<asp:TextBox Text='<%# Bind("SubmitDT") %>' runat="server" ID="SubmitDTTextBox" />
这两个都位于asp:FormView中,ID =“AddItemFv”,其中有一个DataSourceID =“AddInvAsset”(这与此讨论无关,只是作为补充信息提供)。
以下是我的问题背后的代码:
namespace CInTrac
{
public partial class AddAsset : System.Web.UI.Page
{
protected void Page_Preload(object sender,EventArgs e)
{
AddInvAsset.SelectParameters.Add("SubmitBy", Session["RegUser"].ToString());
AddInvAsset.SelectParameters.Add("SubmitDT", DateTime.Now.ToString("MM/dd/yyyy"));
}
protected void Page_Load(object sender, EventArgs e)
{
Label uname = (Label)AddItemFv.Row.FindControl("SubmitBy");
if (uname != null)
uname.Text = Session["RegUser"].ToString();
TextBox udate = (TextBox)AddItemFv.Row.FindControl("SubmitDT");
if (udate != null)
udate.Text = DateTime.Now.ToString();
Response.Write("<b>Submitted by should be:</b> = " + Session["RegUser"].ToString() + "<br>");
Response.Write("<b>Submit Date should be:</b> = " + DateTime.Now.ToString("MM/dd/yyyy") + "<br>");
}
}
}
我遇到的问题就是你在上面的例子中所看到的;绝对没有!我是C#的新手,所以我可能在这里做了一些错误的代码,在调试我的跟踪表明,当我们检查null时,它无法为每个VAR的.Text分配值,因此我们的值永远不会出现。
更新: 正如IM指出的那样,我错过了代码中控件的正确名称。以下是我对上面代码所做的更正,效果很好。再次感谢Inquisitive_mind指出我的错误。 :
protected void Page_Load(object sender, EventArgs e)
{
Label uname = (Label)AddItemFv.Row.FindControl("SubmitByLbl");
if (uname != null)
uname.Text = Session["RegUser"].ToString();
TextBox udate = (TextBox)AddItemFv.Row.FindControl("SubmitDTTextBox");
if (udate != null)
udate.Text = DateTime.Now.ToString("MM/dd/yyyy");
}
答案 0 :(得分:1)
控件的ID不正确
更改
Label uname = (Label)AddItemFv.Row.FindControl("SubmitBy");
TextBox udate = (TextBox)AddItemFv.Row.FindControl("SubmitDT");
要
Label uname = (Label)AddItemFv.Row.FindControl("SubmitByLbl");
TextBox udate = (TextBox)AddItemFv.Row.FindControl("SubmitDTTextBox");
修改强>
您必须将FindControl移动到FormView事件。只有在完全创建FormView并进行数据绑定后才能访问控件。尝试将代码从page_load移动到YourFormView_Databound事件。
protected void YourFormView_DataBound(Object sender, EventArgs e)
{
Label uname = (Label)AddItemFv.Row.FindControl("SubmitByLbl");
if (uname != null)
uname.Text = Session["RegUser"].ToString();
TextBox udate = (TextBox)AddItemFv.Row.FindControl("SubmitDTTextBox");
if (udate != null)
udate.Text = DateTime.Now.ToString();
}