我用GridView1 结合FormView1 结合做数据的增删除改, GridView1 绑字objectDataSource1,FormView1 绑字objectDataSource2. 另又写了一个数据组件类, EmployeeBLL,做为两个objectDataSource的数据源.
所有的处理都在FormView1做,GridView1 只是显示,另外,GridView1 和FormView1 的DataKeyNames都设为id,
且在FormView1的ItemTemplate中,id用label绑定,用Eval("id").
现在的问题是,能新增,但删除不行,
1:如果把objectDataSource2的 OldValuesParameterFormatString="original_{0}" 改为={0},是可以的,
2: 如果把FormView1的DataKeyNames去掉,能执行,但id总是得到0,所以也删除不了,
3: 还有,如果这些都没做,就会出现未能找到带参数的非泛型方法.这些解决方法到底哪个是正统的呢,还是有什么地方没有设置对呢,请大家指点?
所有的处理都在FormView1做,GridView1 只是显示,另外,GridView1 和FormView1 的DataKeyNames都设为id,
且在FormView1的ItemTemplate中,id用label绑定,用Eval("id").
现在的问题是,能新增,但删除不行,
1:如果把objectDataSource2的 OldValuesParameterFormatString="original_{0}" 改为={0},是可以的,
2: 如果把FormView1的DataKeyNames去掉,能执行,但id总是得到0,所以也删除不了,
3: 还有,如果这些都没做,就会出现未能找到带参数的非泛型方法.这些解决方法到底哪个是正统的呢,还是有什么地方没有设置对呢,请大家指点?
如果是model,则需要指定DataObjectTypeName,如果是非model形,则每个绑定的源需要和方法参数吻合
主键是自动增量的,不会有以上问题!!主键不是自动增量的,楼主说"id用label绑定,用Eval("id"). "
问题就出在这里,改为TextBox,Bind("id")双向绑定,应该没问题了!!
<DeleteParameters>
<asp:Parameter Name="KeyField" Type="String" />
</DeleteParameters>这样,当ObjectDataSource在删除时就会执行方法 public void DeleteData(string KeyField);
超级简单的问题!
GridView1.SelectedIndex = -1;
Grid1.DataBind();GridView1就刷新了。而此时FormView应该显示什么,我没有从你的描述中看出他们的关系所以也不知道结果。如果你的FormView的Visible跟GridView的SelectIndex相关,那么显然由于它是-1,Visible就因该值为false,就不显示了。
this.ListView1.DataBind();这样,你可以把FormView或者其它任何创意,封装在这个ascx中,它执行你要求的行为,你定义了它的id参数和 AfterDeleted 事件的行为,但是对于内部如何设计的可以并不关心,它的内部也无需知道调用者GridView1。
1.改为TextBox 双向绑定,也没用,(我现在是删除,不是新增,我想不用双向绑定),
2.我的数据库中主键为id,int 型,自增的,
3.gridview和formview的显示是通过下面的方法:
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (FormView1.CurrentMode == FormViewMode.Insert)
FormView1.ChangeMode(FormViewMode.ReadOnly);
}
这个是没有问题的.
你遇到的objectDataSource问题我刚开始接触也同样遇到!!
如果是id,int 型,自增的,据我的经历,正常的什么都不要修改!!肯定是这样!!我现在一直这样用!!
所以你的问题我很感兴趣!!问一下:
1.你删除是在GridView进行,还是在FormView中进行?
2.底层是强类型的DataSet,还是自编的类?
3.你删除的时候,id传到了EmployeeBLL中间层了吗?
1.删除是在FormView中进行
2.自编的类的类,即加上[System.ComponentModel.DataObject], [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete, true)]...
3.id有时总传0,但在FormView加上datakeyname为id, 且objectDataSource2的 OldValuesParameterFormatString="original_{0}" 改为={0},是可以删除的,现在我也是可以做的,不过我过去做过不用改
original_{0}的也能删除的,但现在不行了,所以问一下大家是原因.
DataSet中的Delete方法必须带有:
DELETE FROM Author WHERE (Id = @Original_Id)
OldValuesParameterFormatString的属性就是默认的original_{0}
这样就无须修改任何东西!!如过是:
DELETE FROM Author WHERE (Id = @Id)
则在OldValuesParameterFormatString的属性中必须是{0}楼主试试是不是这样!!