我使用c#在asp.net中有一个datagridview。我正在使用此代码使行可选:
protected void OnRowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(gvTasks, "Select$" + e.Row.RowIndex);
e.Row.ToolTip = "Click to select this row.";
}
}
protected void OnSelectedIndexChanged(object sender, EventArgs e)
{
foreach (GridViewRow row in gvTasks.Rows)
{
if (row.RowIndex == gvTasks.SelectedIndex)
{
DataTable mydt = new DataTable();
mydt = (DataTable) Session["dt"];
Response.Redirect("EditTask.aspx?taskID=" + mydt.Rows[gvTasks.SelectedIndex].ItemArray[0].ToString()
+ "&agentID=" + mydt.Rows[gvTasks.SelectedIndex].ItemArray[1].ToString());
}
else
{
}
}
}
我的挑战是我添加了一个新的数据绑定列,这是我需要用户导航到的链接。由于单击该行将自动转到某个页面(在本例中为“编辑任务”),最终会将您带到“编辑任务”页面,我点击该链接或该行的任何位置。
我需要确定单击了哪个列,这样我就可以添加额外的逻辑,如果它的特定列使用一个url或所有其他列,则使用另一个url。我没有在asp.net datagridview上找到selectedColumn属性。确定选择哪个列的最佳方法是什么。
答案 0 :(得分:2)
GridView
没有允许选择列的内置机制,因此无法使用GridView
功能。
一种方法是在用户单击某个字段时在隐藏字段中设置列号,然后在OnSelectedIndexChanged
事件中检索此隐藏字段值。
在gridview之外,插入一个新的hiddenField
<asp:hiddenField runat="server" id="hfColumnId" />
单击某行时,请使用JavaScript设置此值:
$('table#XXX td').click(function(){
var columnId = $(this).parent().children().index($(this));
$('#hfColumnId').val(columnId);
});
然后在OnSelectedIndexChanged
事件中,您可以使用
Int32 columnId = Int32.Parse(this.hfColumnId.Value);
答案 1 :(得分:0)
我对Stack溢出的第一个回答:也许你需要做的是使用稍微不同的方法。由于您的目标是让用户转到他们从数据网格中单击的链接,您应该在运行时创建一个具有该链接的列。你可以通过2种方式实现,Programmatically或asp。将以编程方式回答
以编程方式:此代码在绑定网格时开始
GridView1.DataBind(); //绑定网格视图后,请执行以下操作
for (int i = 0; i < GridView1.Rows.Count; i++)
{
HyperLink hlContro = new HyperLink();
hlContro.NavigateUrl = "./newPage.aspx?ID=" + GridView1.Rows[i].Cells[3].Text; //This is where your url is being kept in the grid
hlContro.Text = "Click me to go to the link";
GridView1.Rows[i].Cells[3].Controls.Add(hlContro);//adds the control to the gridview
}
非常感谢那些帮助我解决堆栈溢出问题的人,并帮助我找到了今天我可以帮助你的地方。希望我帮忙。 - Samcima