使用FormView插入

时间:2011-03-28 16:47:45

标签: c# asp.net .net 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语句?我该怎么做呢?

2 个答案:

答案 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())