【问题标题】:How to populate GridView with two string values如何用两个字符串值填充 GridView
【发布时间】:2016-01-06 19:51:26
【问题描述】:
<asp:GridView ID="gvData" EmptyDataText="No data to display" ClientIDMode="Static" runat="server" AutoGenerateColumns="false" CssClass="gvData">
    <Columns>
        <asp:TemplateField HeaderText="Content">
            <ItemTemplate>
                <asp:Label ID="lblID" runat="server" ClientIDMode="Static" Text='<%# Eval("Provider") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="In Collection(s)">
            <ItemTemplate>
                <asp:Label ID="lblID" runat="server" ClientIDMode="Static" Text='<%# Eval("Collection") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

C#:

strCollFinalized = ddlContent.SelectedValue + "," + CheckInCollection(Convert.ToInt64(ddlContent.SelectedItem.Value)); //returns two string values
string[] strL = strCollFinalized.Split(',');
gvData.DataSource = strL;
gvData.DataBind();

上面的代码给了我一个错误:

DataBinding: 'System.String' does not contain a property with the name 'Provider'.

如何将第一个字符串填充到Provider 列中,将第二个字符串填充到Collection 列中。

【问题讨论】:

  • 您是否将数据网格Auto Generate Columns 设置为false..?
  • 尝试将列绑定到 Container.DataItem - Text=
  • 是的,目前设置为false
  • 应该! (如果没有的话会很奇怪)
  • 啊,现在我明白了。当然,它将填充两行。如果您想查看具有不同值的两列,作为一种可能(也是最简单)的解决方案,您必须创建一个具有两个属性的对象,每个属性分别分配给数组中的项目,然后将列绑定到属性

标签: c# asp.net gridview


【解决方案1】:

当您说Text='&lt;%# Eval("Provider") %&gt; 时,您会得到Templatefield 的错误原因。所以它正在寻找不存在的源中的属性/列名称Provider,因此出现错误。

如果您想将此字符串集合作为 gridview 的源,则完全删除这些模板字段,然后您可能可以说

List<string> strL = strCollFinalized.Split(',').ToList();
gvData.DataSource = strL;
gvData.DataBind();

另一种方法是创建 DataTable 类似

DataTable dt = new DataTable();
DataColumn dc = new Datacolumn("Provider");
DataColumn dc1 = new Datacolumn("Collection");

dt.columns.Add(dc);
dt.columns.Add(dc1);

DataRow dr = dt.NewRow();
dr[dc] = ddlContent.SelectedValue;
dr[dc1] = CheckInCollection(Convert.ToInt64(ddlContent.SelectedItem.Value));

dt.Rows.Add(dr);
gvData.DataSource = dt;
gvData.DataBind();

【讨论】:

  • 它确实有效,只是两列都显示了第一个值,两列都显示了第二个值
  • @SiKni8,快速浏览一下我刚刚进行的编辑。会为你工作。
  • 然后我必须将自动生成列设置为 true。对吗?
  • 没找到你。你的意思是你的分裂不起作用?无需将其转换为列表。仅保留您的代码,因为现在我们正在制作数据表。
  • @SiKni8,您可能不需要拆分。再次查看编辑。您可以直接分配值。
猜你喜欢
  • 1970-01-01
  • 2019-03-21
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
相关资源
最近更新 更多