【问题标题】:detailsview, how null value came?detailsview,空值是怎么来的?
【发布时间】:2012-07-28 14:13:32
【问题描述】:

我在处理 Detailsview InsertItemTemplate 时遇到问题。我正在关注 WROX 的 ASP.Net 4 for Beginners。

我有一个带有表 Employee(EmpId, Name, DoB, Sex, DeptId, Position) 的数据库 我正在尝试使用 Detailsview 将值插入此表中。

使用常规的详细信息视图,我可以插入所有值。它工作正常。但是当我将详细信息视图转换为模板时,出现了问题。

我做了什么?

-在Detailsview的Smart标签上,我点击了Edit Fields。删除除 EmpID 之外的所有可用字段,并从可用字段中添加模板字段。 - 再次在 Detailsview 的 Smart Tag 上,单击 Edit Template 并在 DropDownList 中选择 InsertItemTemplate。 - 使用工具箱中的标准组件,我为名称添加了文本框,并为其他字段添加了下拉列表。 (我没有删除 EmpId,所以我不需要它)。 - 这是标记视图的其余部分:

输入以下信息进行注册: 姓名:
出生日期:
性别:
部门编号:
位置:

-这里是插入事件的 CS 文件后面的代码以获取详细信息视图

protected void DetailsView1_ItemInserting1(object sender, DetailsViewInsertEventArgs e) { 字符串 id = System.Guid.NewGuid().ToString(); 文本框 txt_name = (TextBox)DetailsView1.FindControl("EmpId"); e.Values["EmpId"] = id;

    DropDownList ddl_month = (DropDownList)DetailsView1.FindControl("DDL_Month");
    string month = ddl_month.SelectedValue;
    e.Values["DDL_Month"] = month;

    DropDownList ddl_day = (DropDownList)DetailsView1.FindControl("DDL_Day");
    string day = ddl_day.SelectedValue;
    e.Values["DDL_Day"] = day;

    DropDownList ddl_year = (DropDownList)DetailsView1.FindControl("DDL_Year");
    string year = ddl_year.SelectedValue;
    e.Values["DDL_Year"] = year;

    DropDownList ddl_sex = (DropDownList)DetailsView1.FindControl("DDL_Sex");
    string sex = ddl_sex.SelectedValue;
    e.Values["DDL_Sex"] = sex;

    DropDownList ddl_pos = (DropDownList)DetailsView1.FindControl("DDL_Pos");
    string pos = ddl_pos.SelectedValue;
    e.Values["DDL_Pos"] = pos;

    DropDownList ddl_deptid = (DropDownList)DetailsView1.FindControl("DDL_DeptId");
    string deptid = ddl_deptid.SelectedValue;
    e.Values["DDL_DeptId"] = deptid;
}

-您能否建议我如何组合从下拉列表中选择的三个值作为出生日期并将其添加到数据库中。

谢谢!!!

【问题讨论】:

    标签: asp.net detailsview


    【解决方案1】:

    详细说明:

    是的,这将是第一步。连接字符串应添加到您的 web.config 中的 '' 元素下:

    http://msdn.microsoft.com/en-us/library/bf7sd233.aspx

    然后你可以在你的代码中读出来:

    Read connection string from web.config

    下面显示了一个相当好的通用表单,用于根据您从表单中获取的值将数据库更新到 SQL 数据库中 - 用 C# 完成(我建议开始使用它而不是 VB.NET,因为各种充分的理由)

    Update database with values from textbox

    这显示了如何直接在代码中而不是从 web.config 添加连接字符串,这在第一个实例中对您来说可能更简单。这显示了如何通过在查询中使用“参数”来更新数据库(如果您喜欢,“变量”用 @ 符号表示)。使用参数是值得习惯的基本良好实践(不要太担心原因,但您可能需要研究黑客用来攻击网站的“SQL 注入”技术)。这对您来说是一个很好的起点。起初它可能看起来很复杂,但询问任何有几年经验的开发人员,他们会告诉你这通常是要走的路。随着开发的进展,.NET 提供的诱人的“开箱即用”的东西变得越来越受限,并且您失去了微调性能和良好应用程序的其他特征的能力。

    我给出的例子实际上还是比较简单的。随着您的开发,您应该开始将其他方面引入您的代码,尤其是在称为“数据访问层”(通常是中间层被称为“业务逻辑层”或类似的层,但不要担心)。

    此外,我给出的示例实际上应该将一些代码打包在方法中,这些方法可以清楚地指示代码正在做什么,例如在更简单的层面上,至少可以使用方法“UpdateMachineDetails”来封装更新数据库的代码。

    如果您使用 Google 搜索,会有很多教程向您展示如何在 .NET 中“手动”更新数据库,但我给您的表格让您走上了行业最佳实践的良好轨道 -受到软件开发人员的广泛欢迎。

    【讨论】:

    • 感谢您的回复和链接。现在开始有所收获。
    【解决方案2】:

    使用内置的 .NET 控件,如果您尝试删除已生成的字段,通常会遇到问题。让事情以这种方式工作的最佳选择是完全删除并重新添加您正在使用的控件,然后尝试更改您尝试使用模板的字段。您可能仍然会遇到一些问题,但应该不会太难。

    以这种方式使用控件往往不够灵活,而且很难解决问题。这就是为什么大多数有经验的开发人员放弃这种“简单”的做事方式,并通过创建表单、读取值并将其传递给将执行相关 SQL 更新的方法来手动更新数据库。学习需要一些时间,但一旦掌握了窍门,它就会变得很容易,并且解决了很多困难,试图解决您需要使用控件的非常特定的 .NET 方式。

    【讨论】:

    • 感谢您的回复。手动更新是指创建连接字符串并使用它吗?
    • 是的,这将是第一步。连接字符串应添加到您的 web.config 中的 '' 元素下:
    • 连接字符串已经存在于 webconfig 文件中。我需要添加另一个吗?什么和如何?谢谢!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多