我有GridView,它不会自动生成列。在GridView中有3列:一列用于Checkbox(从DataTable中删除选定的行), 一个用于编辑链接按钮(用于编辑当前行), 第三个是显示来自DataTable的数据。
我从DataTable绑定它。 我在DataTable中有一个主键。 现在我的问题是,当我点击编辑链接按钮时,我没有得到主键(id) 网格视图中所选行的数据表(我想在单击编辑链接按钮时未选中行)。我不能将行索引与数据表主键匹配,因为GridView中绑定的数据已被过滤。
我试过的是,我在网格视图中再创建了一个隐藏的列,它是DataTable的主键列。但对于这一点,我也没有在点击要编辑的行的隐藏列中获取数据。
有人请帮助我提出一个新的想法,或者解决我正在尝试的事情。提前做好。
答案 0 :(得分:0)
请试试如下..对于更新,可以在gv_RowCommand事件中获取所选ID。对于delection [multiple select checbox],请检入btnDelete_Click,enter code here
-------------- aspx代码------------------------------- -
<asp:Button ID="btnDelete" runat="server" Text="Delete"
onclick="btnDelete_Click" />
<asp:GridView ID="gv" runat="server" AutoGenerateColumns="False"
DataKeyNames="ID" onrowcommand="gv_RowCommand"
onrowupdating="gv_RowUpdating">
<Columns>
<asp:TemplateField HeaderText="Delete">
<ItemTemplate>
<asp:CheckBox ID="chkSel" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Update">
<ItemTemplate>
<asp:LinkButton runat="server" CommandArgument='<%# Eval("ID") %>' CommandName="Update" text="Update" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="NAME" HeaderText="Name" />
</Columns>
</asp:GridView>
---------------代码背后---------------------------
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
BindData();
}
private void BindData()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("NAME");
DataRow dr = dt.NewRow();
dr[0] = "1";
dr[1] = "James";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "2";
dr[1] = "Paul";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "3";
dr[1] = "Mary";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "4";
dr[1] = "Susan";
dt.Rows.Add(dr);
gv.DataSource = dt;
gv.DataBind();
}
protected void gv_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Update")
{
string id = e.CommandArgument.ToString();
}
}
protected void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
}
protected void btnDelete_Click(object sender, EventArgs e)
{
string idList = "";
for (int i = 0; i < gv.Rows.Count; i++)
{
CheckBox chk = (CheckBox)gv.Rows[i].FindControl("chkSel");
if (chk != null && chk.Checked)
idList += gv.DataKeys[i].Value.ToString() + ",";
}
}