繁体   English   中英

使用FormView插入

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM