[英]Inserting using FormView
我试图使用基本的FormView控件插入项目。
我对C#及其控件有点新,所以请耐心等待。 FormView具有标准条目,如:
ItemName
ItemPrice
ItemSize
它还具有对用户隐藏的控件,例如:
ItemDateCreated
ItemDatechanged
ItemChangedBy
这些项我试图在Insert()发生之前修改它们的值,所以我捕获了事件InsertButton_Click():
protected void InsertButton_Click(object sender, EventArgs e)
{
LinkButton btnInsert = (LinkButton)FormView1.FindControl("InsertButton");
TextBox txtDateAdded = (TextBox)FormView1.FindControl("ItemDateAddedTextBox");
TextBox txtDateChanged = (TextBox)FormView1.FindControl("ItemDateChangedTextBox");
TextBox txtChangedBy = (TextBox)FormView1.FindControl("ItemChangedByTextBox");
txtDateAdded.Text = DateTime.Now.ToString("MMMM dd, yyyy");
txtDateChanged.Text = DateTime.Now.ToString("MMMM dd, yyyy");
txtChangedBy.Text = HttpContext.Current.Request.ServerVariables["AUTH_USER"].ToString();
tblItems.Insert();
}
它一直告诉我ItemName字段是NULL,并抛出一个错误,即使我可以清楚地看到该值正在文本框中设置。 为什么这个值被抛出为NULL? 在调用Insert()之前,是否需要手动创建INSERT语句? 我该怎么做呢?
如果没有看到您的.aspx代码,很难确定,但ItemName未包含在您提供的代码示例中。 听起来您的数据绑定语法可能不正确,因此页面上文本框中的值未正确映射到Insert命令中的参数。
此外,您可能想要做的而不是隐藏文本框控件与数据源上的Inserting
事件相关联。 此示例假定您使用的是SqlDataSource控件,因此请根据您的特定数据源进行更改:
private void On_Inserting(Object sender, SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters.Add(new SqlParameter("ItemDateAddedTextBox", DateTime.Now.ToString("MMMM dd, yyyy")));
...
}
您可以在.aspx页面中的数据源定义中附加此处理程序。 在网页的设计视图中,单击数据源,然后在属性窗口中,单击“事件”选项卡。 如果您双击Inserting事件,它应该在您的代码隐藏中为您创建处理程序,并且您只需填写您的实现。
如果字段值是从系统设置的,那么我建议使用getdate直接在Sql中执行,而不是通过asp.net代码。
例如:
insert into mytable (...,..., ItemDateCreated) values (...,...,getdate())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.