请教,在datagrid中如何在HyperLinkColumn中传递一个以上的参数?

flower2000 2003-08-18 03:37:33
我的写法是这样的,
<asp:HyperLinkColumn ItemStyle-Width="20%" HeaderText="期数" DataNavigateUrlField="id" DataNavigateUrlFormatString="new_magazine.aspx?id={0}" DataTextField="which_period" />

但只能传递一个参数"id",我还想从数据库中提取另一个参数传递过去,应该怎么写呢?



如何写成DataNavigateUrlFormatString="new_magazine.aspx?id={0}&magazinename=<%# DataBinder.Eval(Container.DataItem,"id") %>" ,则提示出错:

.DataGridColumnCollection”内不允许包含文字内容.

请教一下大家这个问题应该怎么解决呢?




...全文
161 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
flower2000 2003-08-19
  • 打赏
  • 举报
回复
看到了:)
chnking 2003-08-19
  • 打赏
  • 举报
回复
<asp:TemplateColumn HeaderText="id">
<ItemTemplate>
<asp:HyperLink id="HyperLink1" runat="server" NavigateUrl="url.aspx?name1=<%# DataBinder.Eval(Container.DataItem, 'para1')%>&name2=<%# DataBinder.Eval(Container.DataItem, 'para2')%>" />
</ItemTemplate>
</asp:TemplateColumn>
QinMuBiao 2003-08-19
  • 打赏
  • 举报
回复
用按钮列可以解决。

除使您得以定义其他列类型的编辑、删除、选择和超级链接功能外,DataGrid Web 服务器控件中的 ButtonColumn 列还使您得以为网格中的项定义自定义功能。例如,可以使用 ButtonColumn 创建“添加到购物车”按钮。

可以将 ButtonColumn 中的按钮指定为 PushButton(普通按钮样式)或 LinkButton(超级链接样式)按钮。按钮标题可以是静态文本或从数据库读取的文本。

定义按钮列时,指定与该按钮关联的命令。当用户单击该按钮时,将该按钮的命令传递给容器(DataGrid 控件),在那里可以使用自定义代码处理它。

添加按钮列

在“设计”视图中,选择 DataGrid 控件,然后单击“属性”窗口底部的“属性生成器”链接。
在“DataGrid 属性”对话框中单击“列”选项卡。
在“可用列”框中,选择“按钮列”并单击“添加”按钮 ()。
注意 可展开“按钮列”节点以显示“选择”、“编辑”和“删除”按钮列类型。但是,对于自定义按钮,必须选择“按钮列”节点。
设置列的标头文本和脚注文本。如果要将图像而不是文本作为标头,请在“页眉图像”框中选择图像。默认情况下,DataGrid 将数据源中该字段的名称显示为标头文本。
注意 只有在“常规”选项卡中选择了“显示页眉”和“显示页脚”后,才会显示页眉和页脚。
如果希望能够按列的内容进行排序,则为该列设置“排序表达式”。有关详细信息,请参阅向 DataGrid Web 服务器控件添加排序功能。
如果要创建具有静态文本的按钮,请在“正文”框中设置按钮的标题。如果要将数据库字段的内容显示为按钮的标题,请从“文本字段”列表中选择该字段。如果要使用文本字段设置该按钮文本,可使用“文本格式字符串”框为该文本指定格式设置表达式。有关创建格式设置表达式的信息,请参阅 String.Format 方法。
从“按钮类型”列表中选择该按钮是链接按钮 (LinkButton)(超级链接样式)还是普通按钮。
在“命令名”框中,输入单击该按钮时应发送给 DataGrid 控件的命令。有关使用命令文本的详细信息,请参阅下一节“响应按钮事件”。
定义按钮列是在网格中创建自定义按钮的一部分。还必须创建事件处理程序以便在用户单击按钮时进行响应。

响应按钮事件

为 DataGrid 控件的 ItemCommand 事件创建事件处理程序。当用户单击网格中任何按钮列中的任何按钮时都引发此事件。有关详细信息,请参阅在 Web 窗体页中创建事件处理程序。
在该方法中,通过查看传入该事件的 DataGridCommandEventArgs 参数中的信息来确定单击了哪个按钮。
检查事件参数对象 (e.CommandName) 的 CommandName 属性来查看传入什么命令字符串。
使用该参数对象的 Item 属性获取对 DataGridItem 类实例的引用,该实例与用户所单击的行关联。而 Item 属性包含拥有当前行内容的 Cells 集合 (e.Item.Cells)。每个单元格具有一个包含该单元格内容的 Text 属性。
下面的示例显示可以如何进行测试以查看命令字符串“AddToCart”是否传递给了事件处理程序。如果进行了传递,则该示例提取包含产品 ID 的列 (2) 的值,该产品 ID 用于将项添加到购物车。

' Visual Basic
Private Sub DataGrid1_ItemCommand(ByVal source As Object, _
ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
Handles DataGrid1.ItemCommand
'e.Item is the row of the table where the button was
' clicked.
Dim productID As String
productID = e.Item.Cells(2).Text
If (e.CommandName = "AddToCart") Then
' Add code here to add the productID item to the cart.
End If
DataGrid1.DataBind()
End Sub

// C#
private void DataGrid1_ItemCommand(object source,
System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
// e.Item is the row of the table where the button was
// clicked.
string productID = e.Item.Cells[2].Text;

if (e.CommandName == "AddToCart")
{
// Add code here to add the productID item to the cart.
}
DataGrid1.DataBind();
}
noahart 2003-08-18
  • 打赏
  • 举报
回复
up~~
flower2000 2003-08-18
  • 打赏
  • 举报
回复
先谢谢大家,我再试试看。
真的很感激大家的关心:)
szwebnet 2003-08-18
  • 打赏
  • 举报
回复
<asp:HyperLink id="HyperLink1" runat="server" NavigateUrl='<%# "url.aspx?id=" + DataBinder.Eval(Container.DataItem, "id") + "&name=" + DataBinder.Eval(Container.DataItem, "name") %>'>
flower2000 2003-08-18
  • 打赏
  • 举报
回复
急!
flower2000 2003-08-18
  • 打赏
  • 举报
回复
弱弱地再问一下,调试时,提示这一句错误:服务器标记的格式不正确,请问该怎么写呢?
不好意思,见笑了,我刚刚开始接触.net,我觉得.net好难学啊。。

<asp:HyperLink id="HyperLink1" runat="server" NavigateUrl="url.aspx?id=<%# DataBinder.Eval(Container.DataItem, "id")%>&name=<%# DataBinder.Eval(Container.DataItem, "name")%>">

chnking 2003-08-18
  • 打赏
  • 举报
回复
这是完整的:
<asp:TemplateColumn HeaderText="id">
<ItemTemplate>
<asp:HyperLink id="HyperLink1" runat="server" NavigateUrl="url.aspx?name1=<%# DataBinder.Eval(Container.DataItem, "para1")%>&name2=<%# DataBinder.Eval(Container.DataItem, "para2")%>">
</ItemTemplate>
</asp:TemplateColumn>
Maurice 2003-08-18
  • 打赏
  • 举报
回复
gz
flower2000 2003-08-18
  • 打赏
  • 举报
回复
chnking(kent) 你好,如果这样写的话,提示DataGridColumnCollection 必须具有类型为“System.Web.UI.WebControls.DataGridColumn”的项。“ItemTemplate”的类型为“System.Web.UI.HtmlControls.HtmlGenericControl”。

是不是模板列还需要有其他的标记?

flower2000 2003-08-18
  • 打赏
  • 举报
回复
先谢谢一下:)
chnking 2003-08-18
  • 打赏
  • 举报
回复
用模板列
<ItemTemplate>
<asp:HyperLink id="HyperLink1" runat="server" NavigateUrl="url.aspx?name1=<%# DataBinder.Eval(Container.DataItem, "para1")%>&name2=<%# DataBinder.Eval(Container.DataItem, "para2")%>">
</ItemTemplate>
flower2000 2003-08-18
  • 打赏
  • 举报
回复
对不起,打错了一个字,"如何写成"应该为"如果写成"。

62,040

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧