我从动态数据库返回.net中的Gridview
数据,其中一个字段有一长串的分号分隔值。我能够使用换行符代替分号来显示这些数据,但由于此字段中最多可能有20个值,我确信有更好的方法来显示它。
我使用以下代码创建和修改模板字段:
<asp:TemplateField HeaderText="Amalgamation"
SortExpression="Amalgamation">
<ItemTemplate>
<%# Eval("Amalgamation").ToString().Replace(";", "<br />")%>
</ItemTemplate>
</asp:TemplateField>
将填充此字段的数据示例为:100001;100002;600001;600006
。
更新:我试过这个,但没有快乐。在html中:
<%#PopulateArray((string)(Eval("Amalgamation")))%>
<asp:DropDownList ID="ddlStrings" AutoPostBack="true" runat="server"></asp:DropDownList>
然后在后面的代码中使用此函数:
public object PopulateArray(string s)
{
string[] sArray = s.Split(';');
DropDownList ddl = new DropDownList();
ddl = (DropDownList)this.Page.FindControl("ddlStrings");
ddl.DataSource = sArray;
ddl.DataBind();
return sArray;
}
我在行上得到NullReferenceException:ddl.DataSource = sArray
答案 0 :(得分:1)
我假设你只想显示这些数据。如果您希望用户能够编辑数据但是能够将其重新组合成分隔的字符串,那么这是一个更复杂的问题 - 以至于您可能想要重新考虑如何将数据存储在数据库中。
将分隔字符串转换为字符串数组的最简单方法是使用String.Split
方法:
string s = "111;333;555;";
string[] sParts = s.Split(";");
您可能必须在代码隐藏中执行此操作,而不是在绑定表达式中,因为您不仅需要拆分字符串,您可能希望将其绑定到某些内容。有很多选项:您可能喜欢BulletedList
网页控件。
答案 1 :(得分:0)
绑定到下拉列表似乎是一个好主意...如果你需要在<EditItemTemplate>
编辑它,为了显示目的,这已经足够了......
答案 2 :(得分:0)
我认为你可以这样做,但如果只是为了显示你就不必绑定到下拉列表。您只需添加标记即可生成标准的html下拉列表。
如果你想得到想象,一个函数如何返回一些html,其中一个显示前几个项目,一个“...”如果还有更多,一些脚本将其展开以显示整个列表你鼠标移动,或类似的东西?
答案 3 :(得分:0)
好的,我已经掌握了它的底部。我正在引用Dropdown的ID,而不是引用它的每个行实例。我使用参数:
将代码放在gridview的行创建事件中onrowcreated="ArrayDataView_RowCreated"
每次在表中创建一行时,我都会使用分号分隔符拆分结果。我还使用我用于数据库的对象类(“MyData”)来转换每个结果。然后,我必须使用“if”语句过滤掉gridview的页眉和页脚数据行。以下是代码背后的行创建代码:
protected void ArrayDataView_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("ddlStrings");
ddl.DataSource = (e.Row.DataItem as MyData).Amalgamation.Split(';');
}
}
}
我删除了aspx页面中的eval函数,gridview中的项目模板只是简化为容纳下拉列表:
<ItemTemplate>
<asp:DropDownList ID="ddlStrings" AutoPostBack="false" runat="server"></asp:DropDownList></ItemTemplate>
感谢所有帮助过的人!