我正在尝试使用基本的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语句?我该怎么做呢?
答案 0 :(得分:1)
如果没有看到您的.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事件,它应该在您的代码隐藏中为您创建处理程序,并且您只需填写您的实现。
答案 1 :(得分:1)
如果字段值是从系统设置的,那么我建议直接在Sql using getdate中进行,而不是通过asp.net代码。
e.g:
insert into mytable (...,..., ItemDateCreated) values (...,...,getdate())