У меня есть Gridview с данными, связанными с помощью запроса sql, и один из столбцов sql возвращает либо одно число, либо строку чисел, разделенных точкой с запятой.Например, он может вернуть 1000
или 1001;1002;1003
.Как связать каждое число с отдельным URL [в формате mywebsite.aspx?ID=1000
]?
Моя первоначальная мысль - взять строку, разбить ее на соответствующую подстроку и для каждой подстроки использовать HtmlTextWriter длясоздать теги html с требуемыми атрибутами.
У меня есть следующий код, который я определяю в файле aspx.cs и вызываю в файле aspx следующим образом:
public string getSRNum()
{
string srnum = Convert.ToString(Eval("SRNum"));
Stack<string> _srnums;
if (!String.IsNullOrEmpty(srnum))
{
string[] split = srnum.Split(';');
_srnums = new Stack<string>(split);
// Put HtmlTextWriter in using block because it needs to call Dispose.
using (StringWriter sw = new StringWriter())
{
HtmlTextWriter writer = new HtmlTextWriter(sw);
// Loop over some strings.
foreach (var sr in _srnums)
{
writer.AddAttribute(HtmlTextWriterAttribute.Href, String.Format("http://mywebsite.aspx?ID={0}", Convert.ToString(sr).Trim()));
writer.RenderBeginTag(HtmlTextWriterTag.A); // Begin #1
writer.AddAttribute("runat", "server");
writer.AddAttribute("Text", sr);
writer.RenderBeginTag(HtmlTextWriterTag.Label);//Begin #2
writer.RenderEndTag(); //End #2
writer.RenderEndTag(); // End #1
}
return sw.ToString();
}
}
return srnum;
}
<asp:TemplateField>
<EditItemTemplate >
<asp:textbox ID="txthistory" runat="server" Text ='<%# Eval("SRNum") %>' >
</asp:textbox>
</EditItemTemplate>
<ItemTemplate>
<%
getSRNum();
%>
</ItemTemplate>
</asp:TemplateField>
В настоящее время я получаю сообщение об ошибке «Методы привязки данных, такие как Eval (), XPath () и Bind (), могут использоваться только в контексте элемента управления, связанного с данными».Я подумал, что вместо этого мог бы использовать тег asp:HiddenField
и получить значение оттуда, но он находится вне события Gridview, и поэтому я не знаю, как получить индекс строки.
Есть мысли?