我希望能够通过点击以下GridView
<asp:GridView OnSorting="yourTasksGV_Sorting" AllowSorting="true" ID="yourTasksGV" runat="server" ClientIDMode="Static" EmptyDataText="There is no data to display"></asp:GridView>
我在SQL查询中填充上述内容:
string query = @"SELECT CT.ATTR2739 'Task Name'
,UG.USERGROUPNAME 'Department'
,CT.ATTR2812 'Status'
,CT.ATTR2752 'Due Date'
,'http://dvmag/appnet/workview/objectPop.aspx?objectid=' + CAST(CT.OBJECTID AS VARCHAR) + '&classid=1224' 'Link'
FROM HSI.RMOBJECTINSTANCE1224 CT LEFT JOIN HSI.USERGROUP UG on CT.FK2743 = UG.USERGROUPNUM
WHERE CT.ACTIVESTATUS = 0";
using (SqlConnection conn = new SqlConnection(connString))
{
try
{
SqlCommand cmd = new SqlCommand(query, conn);
// create data adapter
SqlDataAdapter da = new SqlDataAdapter(query, conn);
// this will query your database and return the result to your datatable
da.Fill(taskData);
//conn.Close();
yourTasksGV.DataSource = taskData;
yourTasksGV.DataBind();
}
catch (Exception ex)
{
string error = ex.Message;
}
}
显示以下内容:
Task Name
,Department
,Status
,Due Date
和Link
可点击以对ASC / DESC进行排序? Link
行显示的所有链接都设为Task Name
? (例如:<a href="http://...objectid=8087&classid=1224">Test Event 1</a>
)我将GridView
更改为:
<asp:GridView OnSorting="yourTasksGV_Sorting" AllowSorting="true" ID="yourTasksGV" runat="server" ClientIDMode="Static" EmptyDataText="There is no data to display">
<Columns>
<asp:BoundField DataField="Text" HeaderText="Task Name" SortExpression="TaskName" />
<asp:BoundField DataField="Text" HeaderText="Department" SortExpression="DepartmentName" />
<asp:BoundField DataField="Text" HeaderText="Status" SortExpression="TheStatus" />
<asp:BoundField DataField="Text" HeaderText="Due Date" SortExpression="DueDate" />
<asp:BoundField DataField="Link" HeaderText="Complete Task" SortExpression="CompleteTask" />
</Columns>
</asp:GridView>
这就是出现的情况:
答案 0 :(得分:1)
显式添加列,如下所示:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.columns(v=vs.110).aspx
您的DataTextFields必须与列名称对齐 - 而不是“文本”或“链接”(除非文本和链接是有效的列名称)。
这将允许您将列类型指定为超链接。不要在查询中包含完整链接,而是使用HyperLinkField中的DataNavigateUrlFormatString。 HyperLinkField允许您分别定义DataNavigateUrlField和DataTextField。
请参阅http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.hyperlinkfield(v=vs.110).aspx
要使列可排序,请务必在列上设置SortExpression。
以这种方式定义列时,还必须在GridView上将AutoGenerateColumns设置为false。
<asp:GridView OnSorting="yourTasksGV_Sorting" AllowSorting="true" ID="yourTasksGV" runat="server" ClientIDMode="Static" EmptyDataText="There is no data to display" AutoGenerateColumns ="False">
<Columns>
<asp:BoundField DataField="Task Name" HeaderText="Task Name" SortExpression="TaskName" />
<asp:BoundField DataField="Department" HeaderText="Department" SortExpression="DepartmentName" />
<asp:BoundField DataField="Status" HeaderText="Status" SortExpression="TheStatus" />
<asp:BoundField DataField="Due Date" HeaderText="Due Date" SortExpression="DueDate" />
<asp:HyperLinkField DataNavigateUrlFields="Link" DataTextField="Task Name" DataNavigateUrlFormatString="http://...objectid={0}&classid=12240" HeaderText="Complete Task" SortExpression="CompleteTask" />
</Columns>
</asp:GridView>
然后,将查询的SELECT部分更改为以下内容:
SELECT
CT.ATTR2739 'Task Name'
,UG.USERGROUPNAME 'Department'
,CT.ATTR2812 'Status'
,CT.ATTR2752 'Due Date'
,CT.OBJECTID 'Link'
答案 1 :(得分:1)
我建议将它们转换为模板字段。这是一个看起来如何的例子。
<asp:TemplateField HeaderText="Link" SortExpression="Link">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Link") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" Text='<%# Bind("Link") %>'></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
如果您不想编辑信息,可以删除EditItemTemplate,这会清理一下。希望这有帮助!
编辑:
要将它们转换为模板字段,您需要在设计视图中单击gridview上的智能标记。完成后,单击编辑列,选择要转换的列,然后在该页面的右下角选择转换为模板字段选项。一旦你这样做,如果你想使用一个链接按钮,你将不得不从标签中更改它们,就像转换它们一样,文本框是默认的编辑,标签是默认的项目。