DataList绑定代码(http://msdn.microsoft.com)--青蛙非王子(lostfrog)

本文提供了一个使用C#实现的DataList绑定示例,通过创建数据源并设置DataList的各项属性来展示不同的布局效果,适合ASP.NET初学者学习。

DataList绑定代码 MSDN的好东东。适合初学者。就像俺这样的基础薄弱者 大家见笑了 嘿

[C#]
<!--Page Language="C#" AutoEventWireup="True"--><!--Import Namespace="System.Data"--><script runat="server">

      ICollection CreateDataSource()
      {
         DataTable dt = new DataTable();
         DataRow dr;

         dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
         for (int i = 0; i < 10; i++)
         {
            dr = dt.NewRow();
            dr[0] = "Item " + i.ToString();
            dt.Rows.Add(dr);
         }

         DataView dv = new DataView(dt);
         return dv;
      }

      void Page_Load(Object Sender, EventArgs e)
      {
         if (!IsPostBack)
         {
            DataList1.DataSource = CreateDataSource();
            DataList1.DataBind();
         }
      }

      void Button1_Click(Object Sender, EventArgs e)
      {

         if (DropDown1.SelectedIndex == 0)
            DataList1.RepeatDirection = RepeatDirection.Horizontal;
         else
            DataList1.RepeatDirection = RepeatDirection.Vertical;
         if (DropDown2.SelectedIndex == 0)
            DataList1.RepeatLayout = RepeatLayout.Table;
         else
            DataList1.RepeatLayout = RepeatLayout.Flow;
         DataList1.RepeatColumns=DropDown3.SelectedIndex+1;
         if ((Check1.Checked ==true) &&
            (DataList1.RepeatLayout == RepeatLayout.Table))
         {
            DataList1.BorderWidth = Unit.Pixel(1);
            DataList1.GridLines = GridLines.Both;
         }   
         else 
         {
            DataList1.BorderWidth = Unit.Pixel(0);
            DataList1.GridLines = GridLines.None;
         }   
      }   

   </script>
<form runat="server">
    <h3>DataList Sample</h3>
    <asp:datalist id="DataList1" runat="server" bordercolor="black" cellpadding="3" font-name="Verdana" font-size="8pt">
    <headerstyle backcolor="#aaaadd">
    </headerstyle>
    <alternatingitemstyle backcolor="Gainsboro"></alternatingitemstyle>
    <headertemplate>
    </headertemplate>
    Items <itemtemplate></itemtemplate><!--DataBinder.Eval(Container.DataItem, "StringValue")--></asp:datalist>
    <p>&nbsp;</p>
    <hr align="left" width="300" noshade="noshade" />RepeatDirection: <asp:dropdownlist id="DropDown1" runat="server"><asp:listitem>Horizontal</asp:listitem> <asp:listitem>Vertical</asp:listitem> </asp:dropdownlist><br />RepeatLayout: <asp:dropdownlist id="DropDown2" runat="server"><asp:listitem>Table</asp:listitem> <asp:listitem>Flow</asp:listitem> </asp:dropdownlist><br />RepeatColumns: <asp:dropdownlist id="DropDown3" runat="server"><asp:listitem>1</asp:listitem> <asp:listitem>2</asp:listitem> <asp:listitem>3</asp:listitem> <asp:listitem>4</asp:listitem> <asp:listitem>5</asp:listitem> </asp:dropdownlist><br />Show Borders: <asp:checkbox id="Check1" runat="server"></asp:checkbox>
    <p><asp:linkbutton id="Button1" onclick="Button1_Click" runat="server" text="Refresh DataList"></asp:linkbutton></p>
</form>

你写的这行代码: ```python ["https://www.cebwm.com" + i, "https://www.cebwm.com/wealth/lcxx/jjgg/index.html?cpcode=" + j, for i, j in zip(dataList, dataList2)] ``` 存在 **语法错误**,Python 中列表推导式的 `for` 应该写在前面或中间,而不是放在末尾作为单独的语句;而且你试图在一个表达式中返回两个字符串(用逗号分隔),但没有正确组织结构。 --- ### ❌ 错误分析 你的写法类似: ```python [expr1, expr2, for ...] # ❌ 语法错误! ``` 这是法的。Python 的列表推导式格式应为: ```python [expression for item in iterable] ``` 而你把 `for` 放到了最后,并且前面写了两个表达式,导致语法解析失败。 --- ### ✅ 正确目标推测 从你的代码看,你是想 **同时生成两个 URL 列表**,或者将每一对 `(i, j)` 映射成一个包含两个 URL 的元组或列表。 #### 常见需求场景: 1. 想得到一个由多个 `[url1, url2]` 组成的二维列表。 2. 想得到一个元组列表:`(url1, url2)` 3. 想把两个 URL 合并成一条记录用于后续处理。 --- ### ✅ 解决方案 #### ✅ 方案 1:生成一个包含多个 [url1, url2] 的列表(二维列表) ```python urls = [["https://www.cebwm.com" + i, "https://www.cebwm.com/wealth/lcxx/jjgg/index.html?cpcode=" + j] for i, j in zip(dataList, dataList2)] ``` ✅ 输出示例: ```python [ ['https://www.cebwm.com/path1', 'https://www.cebwm.com/wealth/lcxx/jjgg/index.html?cpcode=ABC'], ['https://www.cebwm.com/path2', 'https://www.cebwm.com/wealth/lcxx/jjgg/index.html?cpcode=XYZ'], ... ] ``` 你可以通过 `urls[0][0]` 访问第一个主站链接,`urls[0][1]` 访问第一个产品链接。 --- #### ✅ 方案 2:生成元组列表(更节省内存) ```python urls = [("https://www.cebwm.com" + i, "https://www.cebwm.com/wealth/lcxx/jjgg/index.html?cpcode=" + j) for i, j in zip(dataList, dataList2)] ``` 输出: ```python [ ('https://www.cebwm.com/path1', 'https://www.cebwm.com/...?cpcode=ABC'), ('https://www.cebwm.com/path2', 'https://www.cebwm.com/...?cpcode=XYZ') ] ``` 适合传给 `requests.get()` 或 Playwright 等批量任务。 --- #### ✅ 方案 3:如果只需要扁平化的所有 URL(合并成一个大列表) ```python from itertools import chain all_urls = list(chain.from_iterable( ["https://www.cebwm.com" + i, "https://www.cebwm.com/wealth/lcxx/jjgg/index.html?cpcode=" + j] for i, j in zip(dataList, dataList2) )) ``` 或使用嵌套列表推导: ```python all_urls = [ url for i, j in zip(dataList, dataList2) for url in ["https://www.cebwm.com" + i, "https://www.cebwm.com/wealth/lcxx/jjgg/index.html?cpcode=" + j] ] ``` ✅ 得到一个一维列表,共 `2 * len(dataList)` 个 URL。 --- ### 🛠️ 示例数据测试 假设: ```python dataList = ["/news/1", "/news/2"] dataList2 = ["F000001", "F000002"] ``` 运行方案1结果: ```python [ ['https://www.cebwm.com/news/1', 'https://www.cebwm.com/wealth/lcxx/jjgg/index.html?cpcode=F000001'], ['https://www.cebwm.com/news/2', 'https://www.cebwm.com/wealth/lcxx/jjgg/index.html?cpcode=F000002'] ] ``` 完美匹配需求。 --- ### ⚠️ 注意事项 - 确保 `dataList` 和 `dataList2` 长度一致,否则 `zip` 会以短的为准。 - 如果需要严格对齐,可以加判断: ```python assert len(dataList) == len(dataList2), "列表长度不一致" ``` - 推荐使用 **方案1**(二维列表)或 **方案2**(元组列表),结构清晰、易于迭代。 --- ### ✅ 总结 | 目标 | 写法 | |------|------| | 每项是 `[url1, url2]` | `[[base+i, detail+j] for i,j in zip(...)]` | | 每项是 `(url1, url2)` | `[(base+i, detail+j) for i,j in zip(...)]` | | 所有 URL 扁平化 | `[url for i,j in zip(...) for url in [base+i, detail+j]]` | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值