VB.NET - 我发现了与此相关的其他问题,但没有特别针对我的情况。我只处理两个表 - “任务”和“task_run”。
我有一个Gridview,其中包含列出某些“任务”的行。它们来自“任务”表,每个任务都有一个“tsk_id”。我希望每个任务(行)都有一个删除按钮,如果任务没有从“task_run”表中与该任务相关联的运行,则只希望删除按钮对该行可见。 (即如果用户已经运行,我不希望用户能够删除该任务。)
table1 - “任务” PKY =“tsk_id”
table2 - “task_run” PKY =“run_id” FKY =“run_tsk_id”
我假设我需要在gridview中有一个模板字段,并根据运行表中是否有与该特定任务Id关联的行有条件地显示删除按钮,但我仍然坚持如何执行此操作。希望这是有道理的。任何帮助表示赞赏。谢谢!
答案 0 :(得分:0)
如果您已经在DataSet中使用了表(ds
说),则可以通过
ds.Relations.Add(name, parentColumn, childColumn, createConstraints)
例如:
ds.Relations.Add(
name,
ds.Tables("task").Columns("tsk_id"),
ds.Tables("task_run").Columns("run_tsk_id"),
True)
或者,您可以添加" task_run_count"通过子查询作为表任务的属性:
SELECT ...,
(SELECT COUNT(*) FROM task_run WHERE run_tsk_id = task.tsk_id) AS [task_run_count]
FROM task
答案 1 :(得分:0)
您绑定到网格的DataSource也应具有任务运行计数。然后,您可以使用RowDataBound事件来显示或隐藏按钮。
Protected Sub Grid_RowDataBound(sender As Object, e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
Dim taskRunCount As Integer = Convert.ToInt16(e.Row.Cells(0).Text) ''The Cells[0] should be which ever column you have Task run count
Dim deleteButton As Button = DirectCast(e.Row.FindControl("DeleteButton"), Button)
If taskRunCount > 0 Then
deleteButton.Visible = False
Else
deleteButton.Visible = True
End If
End If
End Sub
答案 2 :(得分:0)
首先从Task_run表中获取task_Id,如果存在则返回零值,如果没有向用户显示,则将此Task_Id放在带有visible = false属性的Label或textbox或隐藏字段的gridview中, 使用此命令检查任务是否已由用户运行。
SELECT ext.* , ISNULL((SELECT top 1 run_tsk_id
FROM task_run WHERE run_tsk_id = ext.tsk_id),0) AS CheckId
FROM task ext
然后使用gridview RowDataBound事件有条理地隐藏或显示删除按钮,代码为。
Protected Sub Grid_RowDataBound(sender As Object, e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
Dim lblCheckId As Label = DirectCast(e.Row.FindControl("lblCheckId"),Label)
Dim deleteButton As Button = DirectCast(e.Row.FindControl("btnDelete"), Button)
If CInt(lblCheckId.Text) > 0 Then
deleteButton.Visible = False
Else
deleteButton.Visible = True
End If
End If
End Sub