如何使用asp.net和c#从不同的表中创建具有自定义列的网格视图
本文关键字:创建 自定义 视图 网格 net asp 何使用 | 更新日期: 2023-09-27 18:27:55
现在我很困惑如何创建具有以下结构和标准的网格视图:
注意:gridview将从不同的表中获取数据
列:1.IDcol是唯一的值,它将来自表A(作为文本)2.从表A开始的日期(以文本形式)3.link1它将是到另一个页面的超链接,url的参数将是"IDcol"列值,但如果该记录存在于具有相同"IDcol"的表B中,则显示的文本将发生更改,显示的将是"查看/编辑",如果不存在,则为"添加新的"
数据库结构:
表A:
IDcol as (primary key),
Date
表B:
ID,
IDcol as (foreign key from tableA).
other fields
所以我需要使用循环填充网格视图,因为我必须检查每一行并使用一些条件
很抱歉,如果我的描述方式不清楚,但我真的很困惑
我删除部件的代码:
<asp:LinkButton ID="DeleteLink" runat="server" Text="Delete" CommandName="Delete"></asp:LinkButton>
</ItemTemplate>
<ItemStyle Width="100px" />
</asp:TemplateField>
DeleteCommand="DELETE VisitsInfo WHERE ID=@VID">
<DeleteParameters>
<asp:Parameter Name="VID" Type="Int64" />
</DeleteParameters>
代码背后:
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int VID = int.Parse(GridView1.DataKeys[0].Value.ToString());
SqlDataSourceVisits.DeleteParameters[0].DefaultValue = VID.ToString();
}
当我点击删除链接删除行时,它是有效的,但当刷新页面时,它删除了另一行而没有点击删除链接,为什么会发生这种情况??
无论在Gridview中使用多少表来显示数据,最好且更灵活的方法都是使用OnRowDataBound。
//do some database queries to return the appropriate value
DataTable dt = new DataTable();
private void Bind()
{
//set up the dt with all the required data from single or multiple tables
}
//Then in the page Load method, call the above Bind method
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Bind();
}
}
//then do something like the following
int idx = 0;
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//do some database queries to return the appropriate value, then do something like the following
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Cells[0].Text = dt.Rows[idx][0];
e.Row.Cells[1].Text = dt.Rows[idx][1];
//or maybe
((TextBox)e.Row.Cells[0].FindControl("textBox1")).Text = dt.Rows[idx][0];
((Label)e.Row.Cells[1].FindControl("label2")).Text = dt.Rows[idx][1];
((CheckBox)e.Row.Cells[1].FindControl("chkbx1")).Selected = (bool)dt.Rows[idx][2];
idx++;
}
}
正如Pranay所说,您可能希望使用Linq和join从所有表中获取所需的数据,不过,您仍然可以通过觉得舒服的任何其他方式来获取它们
从这两个表创建一个数据视图,并将网格绑定到它。在渲染GridView时,可以在行事件(即rowbound)中设置条件。
如果我做对了,你想从多个表中选择一些列(如A、B、C),然后在gridview中显示它们。如果是这样的话,可以通过各种方式来实现。1.创建一个包含所需数据列的自定义DataSet
,并使用select查询进行填充。然后将数据集绑定到gridview中。2.创建一个包含所需数据列的DataTable
,并使用select查询进行填充。然后将表绑定到gridview中。3.将所需列直接添加到gridview中,然后使用循环在其中添加数据项。注意:在任何情况下,取消检查网格视图的"自动生成列"选项,以实现平稳操作。