【问题标题】:How could I populate data from codebehind to ascx file我如何将数据从代码隐藏填充到 ascx 文件
【发布时间】:2014-05-29 14:49:49
【问题描述】:

在我的代码隐藏中,我得到公司名称和地址:

connection.Open();
                    sqlCmd = new SqlCommand(sqlCmd.CommandText, connection);
                    SqlDataReader sqlReader = sqlCmd.ExecuteReader();
                    DataTable dt = new DataTable();


                    sqlReader.Read();
                    dt.Load(sqlReader);
                    for(int i>=0 ; i = dt.Rows.Cout - 1; i--)
                    {
                           string companyName[i] = dt.Rows[i]["companyName"].ToString();
                           sqlCmd.CommandText = addr;
                           sqlCmd.Parameters.AddWithValue("companyName", dt.Rows[i]["companyName"].ToString());

                           using (var addressReader = sqlCmd.ExecuteReader())
                           {
                               if (addressReader.Read())
                               {
                                string address[i] = addressReader["address"].ToString();
                               }
                           }
                     }

所以我想将 companyName[i] 和 address[i] 值放在我的 ascx 文件中。当前它使用datagrid dgcompanies,但我不想使用datagrid,只想重用它当前的表格格式:

<table cellSpacing="0" cellPadding="0" width="100%" border="0">
<tr id="resultsRow" runat="server">
    <td vAlign="top">
        <a name="tagCompaniesDatagrid"></a>
        <asp:datagrid id="dgCompanies" Width="100%" AllowSorting="True" DataKeyField="companyId" AutoGenerateColumns="False"
            AllowPaging="True" AllowCustomPaging="True" OnPageIndexChanged="dgCompanies_Paging" Runat="server" onprerender="dgCompanies_PreRender" >
            <HeaderStyle CssClass="DGColumnHead" />
            <ItemStyle CssClass="DGItemStyle" />
            <AlternatingItemStyle CssClass="DGAlternatingItemStyle" />
            <FooterStyle CssClass="DGColumnFoot" />
            <PagerStyle CssClass="DGPagerStyle" HorizontalAlign="Right" Mode="NumericPages" PageButtonCount="5" />
            <Columns>
                <asp:TemplateColumn SortExpression="companyName" HeaderText="Company Name">
                    <HeaderStyle Width="40%" />
                    <ItemTemplate>
                        <table cellSpacing="0" cellPadding="0" width="100%" border="0">
                            <tr>
                                <td width="95%">
                                    <asp:LinkButton CssClass="LinkButton" id="btnView" Runat="server" CommandName="ViewDetails" CommandArgument="<%# GetViewUrl((System.Data.Common.DbDataRecord)Container.DataItem) %>">
                                        <span ID="SpanTitle" Runat="server">
                                            <%# DataBinder.Eval(Container.DataItem,"companyName") %>
                                        </span>
                                    </asp:LinkButton>
                                    <asp:Label CssClass="DGNormal" ID="lblStatus" Runat="server" text='<%# StatusToText((int) DataBinder.Eval(Container.DataItem,"statusId")) %>'/>
                                    <asp:Image visible='<%# (bool) DataBinder.Eval(Container.DataItem,"WMCCMRated") %>' ID="imgProfiled" Runat="server" ImageUrl="~/images/WMCCMRated.gif" AlternateText="This company has been competency profiled by WMG" />
                                    <asp:Image Visible='<%# !(Convert.IsDBNull(DataBinder.Eval(Container.DataItem,"feedback")))%>' ID="feedback" Runat="server" ImageUrl="~/images/feedback.gif" AlternateText="The number of feedback this company has been received is ->" ImageAlign="Bottom" Height="18px" Width="12px"/>
                                    <asp:Label CssClass="NormalBold" ID="lblFeedback" Runat="server" text='<%# DataBinder.Eval(Container.DataItem,"feedback") %>' ForeColor="Navy"/>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <span class="DGNormalBold">
                                        <%# DataBinder.Eval(Container.DataItem,"phoneNumber") %>
                                    </span>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <span class="DGNormal" ID="SpanProfile" Runat="server">
                                        <%# cutToNCharacters((string)DataBinder.Eval(Container.DataItem,"Profile")) %>
                                    </span>
                                </td>
                            </tr>
                        </table>
                    </ItemTemplate>
                    <FooterTemplate>
                        <cc1:DropDownCombo ID="dplCompanies" Runat="server" Width="95%" DataTextField="CompanyName" DataValueField="CompanyId" DataSource='<%# GetCompanyNames() %>' />
                    </FooterTemplate>
                </asp:TemplateColumn>
                <asp:TemplateColumn SortExpression="address" HeaderText="Address">
                    <HeaderStyle Width="15%" />
                    <ItemTemplate>
                        <table cellSpacing="0" cellPadding="0" width="100%" border="0">
                            <tr>
                                <td>
                                    <span class="DGNormal" ID="SpanAddress" Runat="server">
                                        <%# DataBinder.Eval(Container.DataItem,"address")%>
                                    </span>
                                </td>
                            </tr>
                        </table>
                    </ItemTemplate>
                </asp:TemplateColumn>

我的理解是,我应该替换这两行:

 <%# DataBinder.Eval(Container.DataItem,"companyName") %>

 <%# DataBinder.Eval(Container.DataItem,"address")%>

但我不知道我还需要更改什么以及如何使其自动填充我的一组值。有谁熟悉这个吗?

【问题讨论】:

  • 我不确定你在这里做什么...你为什么要这样做string address[i] = addressReader["address"].ToString();?这是没有意义的,因为您正在创建一个从未被使用过的i 维度数组...您的数据无处可去...
  • 继续...您能否提供一个简短的示例,说明浏览器中呈现的内容以及您期望呈现的内容。
  • 我的数据将显示在问题中提到的 ascx 文件中!
  • 我明白了,但我提到的那行没有做任何事情。它不会对读出的数据做任何事情。您需要在循环之外声明数组才能使用它们。
  • 我真的不明白你的想法。数组将首先在循环外声明,然后在循环中,我需要有那一行来将值存储到数组中,我认为这有意义吗?每次我在循环中更改时,添加到 commandText 的参数都会更改,然后 addressReader 更改,然后 address[i] 获取新值...

标签: c# asp.net datagrid


【解决方案1】:

聊天结束后,这就是你所需要的......

数据需要存储在模型中,然后可以“回显”到页面上。您需要根据需要修改模型...

ascx

<table>
    <tr>
        <td>company</td><td>address</td>
    </tr>
    <asp:Repeater ID="companyRepeater" runat="server">

    <ItemTemplate>
        <tr>
            <td><%#Eval("companyName") %></td><td><%#Eval("address") %></td>
        </tr>
    </Itemtemplate>

    </asp:Repeater>
</table>

后面的代码

public class CompanyModel{
    public string companyName {get; set;}
    public string address {get; set;}
}

sqlCmd = new SqlCommand("SELECT companyName, address FROM company_table", connection);
SqlDataReader sqlReader = sqlCmd.ExecuteReader();
DataTable dt = new DataTable();

List<CompanyModel> companies= new List<CompanyModel>();
sqlReader.Read();
dt.Load(sqlReader);

for(int i = 0; i < dt.Rows.Count; i++)
{
    companies.Add(new CompanyModel 
    { 
        companyName =  dt.Rows[i]["companyName"].ToString(),
        address =  dt.Rows[i]["address"].ToString()
    });
}

companyRepeater.DataSource = companies;
companyRepeater.DataBind();

【讨论】:

  • 如何访问存储在列表中的每个 companyName 以查询其他值并将它们添加到 CompanyModel ?
  • 我正在尝试这个:foreach(List compnName in Companies.Contains("companyName") { sqlCmd.CommandText = getKey;sqlCmd.Parameters.AddWithValue("companyName", compnName); 使用(var keyReader = sqlCmd.ExecuteReader()) { if (keyReader.Read()) {companies.Add(new CompanyModel compnKey = keyReader.GetString("key")); } } sqlCmd.CommandText = getstandard; sqlCmd.Parameters。 AddWithValue("companyName", compnName);using (var standardReader =sqlCmd.ExecuteReader()) { if (standardReader.Read()){ Companies.Add(new CompanyModel compnStandards = keyReader.GetString("standards")); } } }
  • 列表包含公司。所以你需要让公司摆脱它。 companies.Contains() 返回一个布尔值。您提供的代码可能永远不会编译,因为您要求它在列表中查找字符串。你需要foreach(CompanyModel company in companies) { string companyName = company.companyName; }
  • 请阅读有关迭代和数据建模的知识,因为如果您不了解迭代的基础知识,您只会感到困惑。一个快速的谷歌给了我这个..dotnetperls.com/list
  • 我可以在不同的阶段为公司增加更多的价值吗?喜欢:company.Add(new CompanyModel {compnStandards = dtb2.Rows[0][0].ToString() });那我每次都需要给companyRepeater分配datasource和databind吗?
猜你喜欢
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多