0

我有数据从动态数据库返回到Gridview.net 中,其中一个字段有一长串以分号分隔的值。我能够使用换行符代替分号来显示这些数据,但是由于该字段中可能有多达 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

4

4 回答 4

1

我假设您只想显示此数据。如果您希望用户能够编辑数据但能够将其重新组合成一个分隔字符串,这是一个更复杂的问题——以至于您可能需要重新考虑如何将数据存储在数据库中.

将分隔字符串转换为字符串数组的最简单方法是使用以下String.Split方法:

string s = "111;333;555;";
string[] sParts = s.Split(";");

但是,您可能必须在代码隐藏中执行此操作,而不是在绑定表达式中,因为您不仅需要拆分字符串,还可能希望将其绑定到某些东西。有许多选项:您可能喜欢BulletedListWeb 控件。

于 2013-01-16T17:38:42.903 回答
0

绑定到下拉列表似乎是一个好主意...如果您需要在其中编辑它<EditItemTemplate>,为了显示目的,这已经足够了...

于 2013-01-16T17:22:56.620 回答
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>

感谢所有帮助过的人!

于 2013-01-17T17:34:55.693 回答
0

我认为你可以这样做,但如果它只是为了显示,你就不必绑定到下拉列表。您可以只添加标记来制作标准的 html 下拉列表。

如果您想花哨,那么返回一些带有显示前几个项目的html的函数怎么样,如果还有更多,还有一些脚本来扩展它以显示整个列表, 或类似的东西?

于 2013-01-16T17:43:22.927 回答