在 Edit and Insert Template 中绑定 ListView 中的 DropDown
Bind a DropDown in ListView in Edit & Insert Template
在我的 ASP.NET 4.5 WebForms 应用程序中,在我的 ListView 中,我试图绑定 DropDownList,但我无法做到。实际上,绑定到 ListView 的模型有一个 属性 的 UnitdirectionId & 在编辑和插入模板上我想显示所有 UnitDirection table.
的下拉列表
这是我的 EditTempalte:
<EditItemTemplate>
<tr>
<td>
<asp:TextBox ID="unitDirTxt" runat="server" Text='<%# Bind("UnitDirectionId") %>'></asp:TextBox>
<!-- <asp:DynamicControl runat="server" DataField="UnitDirectionId" ID="UnitDirectionId" Mode="Edit" /> -->
<asp:DropDownList ID="unitDirEditDrop" runat="server" ItemType="VincitoreCRMApplication.Models.UnitDirection"
DataTextField="DirectionTitle" DataValueField="UnitDirectionId"
SelectMethod="GetUnitDirections"></asp:DropDownList>
</td>
</tr>
</EditItemTemplate>
在后面的代码中,
public IQueryable<UnitDirection> GetUnitDirections()
{
return _db.UnitDirections;
}
现在LsitView的Model有如下属性:
[Display(Name= "Unit Direction")]
public int UnitDirectionId { get; set; }
[ForeignKey("UnitDirectionId")]
public virtual UnitDirection UnitDirection { get; set; }
现在,UnitDirection 模型:
public class UnitDirection
{
[ScaffoldColumn(false)]
public int UnitDirectionId { get; set; }
[Required]
[Display]
public string DirectionTitle { get; set; }
}
我得到的错误是:
########## ERRO : An error occurred while executing the command definition. See the inner exception for details.
STACK : at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteSto reCommands(EntityCommand entityCommand, CommandBehavior behavior)
at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResul tType](ObjectContext context, ObjectParameterCollection parameterValues)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__6()
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__5()
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
at System.Web.UI.WebControls.ListControl.PerformDataBinding(IEnumerable dataSource)
at System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e)
at System.Web.UI.WebControls.ListControl.PerformSelect()
at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
at System.Web.UI.Control.DataBindChildren()
at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding)
at System.Web.UI.Control.DataBind()
at System.Web.UI.WebControls.ListView.CreateItemsWithoutGroups(ListViewPagedDataSource dataSource, Boolean dataBinding, InsertItemPosition insertPosition, ArrayList keyArray)
at System.Web.UI.WebControls.ListView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding)
at System.Web.UI.WebControls.ListView.PerformDataBinding(IEnumerable data)
at System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data)
at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
at System.Web.UI.WebControls.DataBoundControl.PerformSelect()
at System.Web.UI.WebControls.ListView.PerformSelect()
at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
at System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound()
at System.Web.UI.WebControls.BaseDataBoundControl.OnPreRender(EventArgs e)
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
在 db 中,UnitDirection table 有 3 个项目。
有了上面的下拉列表,我相信我至少应该在下拉列表中得到所有 UnitDirection 的列表。但是在那上面我遇到了错误。然后是在Edit Template中设置选中项
你能帮我确定为什么会出现这个错误吗??
非常感谢任何帮助。
谢谢
正如我们在 Whosebug 聊天中讨论的那样,您在下拉绑定方法中遇到以下错误。
System.InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.
请在您的 web.config 连接字符串中添加 MultipleActiveResultSets=true
以解决您的问题。
Server=.\SQLEXPRESS;Database=master;Integrated Security=SSPI;
MultipleActiveResultSets=true;
要获取 UnitDirection 值,您需要编写一种方法,如下所示,return UnitDirection 标题为 return 类型。
public string getUnitDirectionTitle(int fiUnitDirectionId)
{
return UnitDirection.Where(c => c.UnitDirectionId == fiUnitDirectionId);
}
在 ItemDataBound 事件中调用上述方法后,
TextBox.Text = getUnitDirectionTitle(loItem.UnitDirectionId);
如果您有任何问题,请告诉我。
在我的 ASP.NET 4.5 WebForms 应用程序中,在我的 ListView 中,我试图绑定 DropDownList,但我无法做到。实际上,绑定到 ListView 的模型有一个 属性 的 UnitdirectionId & 在编辑和插入模板上我想显示所有 UnitDirection table.
的下拉列表这是我的 EditTempalte:
<EditItemTemplate>
<tr>
<td>
<asp:TextBox ID="unitDirTxt" runat="server" Text='<%# Bind("UnitDirectionId") %>'></asp:TextBox>
<!-- <asp:DynamicControl runat="server" DataField="UnitDirectionId" ID="UnitDirectionId" Mode="Edit" /> -->
<asp:DropDownList ID="unitDirEditDrop" runat="server" ItemType="VincitoreCRMApplication.Models.UnitDirection"
DataTextField="DirectionTitle" DataValueField="UnitDirectionId"
SelectMethod="GetUnitDirections"></asp:DropDownList>
</td>
</tr>
</EditItemTemplate>
在后面的代码中,
public IQueryable<UnitDirection> GetUnitDirections()
{
return _db.UnitDirections;
}
现在LsitView的Model有如下属性:
[Display(Name= "Unit Direction")]
public int UnitDirectionId { get; set; }
[ForeignKey("UnitDirectionId")]
public virtual UnitDirection UnitDirection { get; set; }
现在,UnitDirection 模型:
public class UnitDirection
{
[ScaffoldColumn(false)]
public int UnitDirectionId { get; set; }
[Required]
[Display]
public string DirectionTitle { get; set; }
}
我得到的错误是:
########## ERRO : An error occurred while executing the command definition. See the inner exception for details.
STACK : at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteSto reCommands(EntityCommand entityCommand, CommandBehavior behavior)
at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResul tType](ObjectContext context, ObjectParameterCollection parameterValues)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__6()
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__5()
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
at System.Web.UI.WebControls.ListControl.PerformDataBinding(IEnumerable dataSource)
at System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e)
at System.Web.UI.WebControls.ListControl.PerformSelect()
at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
at System.Web.UI.Control.DataBindChildren()
at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding)
at System.Web.UI.Control.DataBind()
at System.Web.UI.WebControls.ListView.CreateItemsWithoutGroups(ListViewPagedDataSource dataSource, Boolean dataBinding, InsertItemPosition insertPosition, ArrayList keyArray)
at System.Web.UI.WebControls.ListView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding)
at System.Web.UI.WebControls.ListView.PerformDataBinding(IEnumerable data)
at System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data)
at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
at System.Web.UI.WebControls.DataBoundControl.PerformSelect()
at System.Web.UI.WebControls.ListView.PerformSelect()
at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
at System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound()
at System.Web.UI.WebControls.BaseDataBoundControl.OnPreRender(EventArgs e)
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
在 db 中,UnitDirection table 有 3 个项目。
有了上面的下拉列表,我相信我至少应该在下拉列表中得到所有 UnitDirection 的列表。但是在那上面我遇到了错误。然后是在Edit Template中设置选中项
你能帮我确定为什么会出现这个错误吗?? 非常感谢任何帮助。
谢谢
正如我们在 Whosebug 聊天中讨论的那样,您在下拉绑定方法中遇到以下错误。
System.InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.
请在您的 web.config 连接字符串中添加 MultipleActiveResultSets=true
以解决您的问题。
Server=.\SQLEXPRESS;Database=master;Integrated Security=SSPI;
MultipleActiveResultSets=true;
要获取 UnitDirection 值,您需要编写一种方法,如下所示,return UnitDirection 标题为 return 类型。
public string getUnitDirectionTitle(int fiUnitDirectionId)
{
return UnitDirection.Where(c => c.UnitDirectionId == fiUnitDirectionId);
}
在 ItemDataBound 事件中调用上述方法后,
TextBox.Text = getUnitDirectionTitle(loItem.UnitDirectionId);
如果您有任何问题,请告诉我。