我在处理Detailsview InsertItemTemplate时遇到问题。我正在关注WROX的ASP.Net 4 for Beginners。
我有一个带有表Employee的dbase(EmpId,Name,DoB,Sex,DeptId,Position) 我正在尝试使用Detailsview将值插入此表。
使用常规详细信息视图,我可以插入所有值。它运行正常。但是当我将detailsview转换为模板时,存在一个问题。
我做了什么?
- 在Detailsview的智能标记上,我点击了编辑字段。删除除EmpID之外的所有可用字段,并从可用字段添加模板字段。 - 在Detailsview的智能标记上,单击编辑模板并在DropDownList中选择InsertItemTemplate。 - 使用Toolbox中的标准组件,我为Name添加了文本框,为其他字段添加了dropdownlist。 (我没有删除EmpId,所以我不需要它)。 - 这是Markup视图的其余部分:
输入以下信息进行注册:
名称:
出生日期:
性别:
DEPTID:
位置:
- 这里是用于详细信息视图的插入事件的CS文件背后的代码
protected void DetailsView1_ItemInserting1(object sender,DetailsViewInsertEventArgs e) { string id = System.Guid.NewGuid()。ToString(); TextBox 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;
}
- 您还建议我如何将出生日期下拉列表中的三个选定值组合并将其添加到数据库中。
谢谢!!!
答案 0 :(得分:1)
使用内置的.NET控件,如果您尝试删除已生成的字段,通常会遇到问题。以这种方式工作的最佳选择是完全删除并重新添加您正在使用的控件,并尝试更改您尝试使用模板的字段。你可能仍然会遇到一些问题,但不应该太困难。
以这种方式使用控件往往不灵活,并且很难解决问题。这就是为什么大多数有经验的开发人员放弃这种“简单”的做事方式,并通过创建表单手动进行数据库更新,读取值并将其传递给将执行相关SQL更新的方法。学习它需要一段时间,但是一旦掌握了它,它就变得容易并且解决了很多困难,试图解决使用控件所需的.NET特定方式。
答案 1 :(得分:1)
详细说明:
是的,这是第一步。连接字符串应添加到''元素:
下的web.config中http://msdn.microsoft.com/en-us/library/bf7sd233.aspx
然后,您可以在代码中阅读:
Read connection string from web.config
以下显示了基于您从表单中获取的值对SQL数据库进行数据库更新的相当不错的一般形式 - 在C#中完成(我建议先用VB而不是VB.NET,各种好的理由)
Update database with values from textbox
这显示了如何直接在代码中添加连接字符串而不是web.config,这在第一个实例中可能更简单。这显示了如何通过在查询中使用“参数”来进行数据库更新(如果您喜欢,则使用@符号表示'变量')。使用参数是基本的良好实践,值得习惯(不要过于担心原因,但你可能想研究黑客用来攻击网站的'SQL注入'技术)。这是一个很好的起点。一开始可能看起来很复杂,但要问任何有几年经验的开发人员,他们会告诉你这通常是要走的路。随着您在开发过程中的进步,.NET提供的“开箱即用”功能越来越受到限制,您将无法精确调整性能和良好应用程序的其他特性。
我给出的例子实际上仍然相对简单。在开发过程中,您应该开始在代码中引入其他方面,尤其是在一个单独的类中创建访问数据库的位(通过使用SQL查询)的方法,这个类被称为“数据访问层”(通常是中间层被称为“业务逻辑层”或类似的,但不要担心它。)
另外我给出的例子应该是在方法中打包一些代码,以清楚地表明代码正在做什么,例如在更简单的级别,方法'UpdateMachineDetails'至少可以用于封装更新数据库的代码。
如果你有谷歌的话,有很多教程可以向你展示如何在.NET中“手动”更新数据库,但是我给你的表格让你走向行业的最佳实践 - 广泛的软件开发人员。