我的页面上有一个网格,并使用复选框检查网格中的一行或多行,我想删除网格旁边的删除按钮,从网格中删除选中的行..
在表格中,我只有名称字段,没有像ID这样的字段。
如何删除记录。
提前致谢..
这是我的代码我在做什么: -
private void GetData()
{
ArrayList arr;
if (ViewState["TotalRecords"] != null)
{
arr = (ArrayList)ViewState["TotalRecords"];
}
else
{
arr = new ArrayList();
}
for (int i = 0; i < grdlistWord.Rows.Count; i++)
{
CheckBox chk = (CheckBox)grdlistWord.Rows[i].Cells[1].FindControl("chkWord");
if (chk.Checked)
{
if (!arr.Contains(grdlistWord.Rows[i].Cells[1]))
{
arr.Add(grdlistWord.Rows[i].Cells[1]);
}
}
else
{
if (arr.Contains(grdlistWord.Rows[i].Cells[1]))
{
arr.Remove(grdlistWord.Rows[i].Cells[1]);
}
}
}
ViewState["TotalRecords"] = arr;
}
protected void lnkbtnDelete_Click(object sender, EventArgs e)
{
try
{
int count = 0;
ArrayList arr = (ArrayList)ViewState["TotalRecords"];
count = arr.Count;
for (int i = 0; i < grdlistWord.Rows.Count; i++)
{
if (arr.Contains(grdlistWord.Rows[i].Cells[1].Text))
{
Response.Write(grdlistWord.Rows[i].Cells[1].Text.ToString());
DeleteRecord(grdlistWord.Rows[i].Cells[1].Text.ToString());
arr.Remove(grdlistWord.Rows[i].Cells[1].Text);
}
}
ViewState["TotalRecords"] = arr;
GridBind();
}
catch (SqlException ex)
{
ex.ToString();
}
}
private void DeleteRecord(string word)
{
string query = "delete from searchword where word=@word";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@word", word);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
gridview html详细信息:
<fieldset>
<legend>List</legend>
<asp:GridView ID="grdlistWord" runat="server" DataKeyNames="word" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" AllowPaging="True" OnRowDataBound="grdlistWord_RowDataBound" OnRowDeleting="grdlistWord_RowDeleting">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chkWord" runat="server" onclick="check_click(this);" />
</ItemTemplate>
<HeaderTemplate>
<asp:CheckBox ID="chkAll" runat="server" onclick="checkAll(this);" />
<asp:LinkButton ID="ButtonDelete" runat="server" Text="Delete" OnClick="ButtonDelete_Click"></asp:LinkButton>
</HeaderTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Word" HeaderText="Word" />
<asp:HyperLinkField HeaderText="Edit" Text="edit" DataNavigateUrlFields="Word" DataNavigateUrlFormatString="SearchWord.aspx?words={0}&mode=Edit" />
<asp:CommandField ShowDeleteButton="True" HeaderText="Delete" />
</Columns>
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<EditRowStyle BackColor="#999999" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<EmptyDataTemplate>Records not exist!</EmptyDataTemplate>
</asp:GridView>
<asp:HiddenField ID="hfCount" runat="server" Value = "0" />
</fieldset>
答案 0 :(得分:1)
为此,您首先在表格中设置了一个主键ID,您将其作为Grid的来源获取。
绑定网格后,您应该将该ID保存在隐藏字段中。请参阅以下代码:
<asp:GridView ID="gvwID" runat="server" AutoGenerateColumns="False"
DataKeyNames="TableID">
<Columns>
<asp:TemplateField>
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Eval("TableID") %>'/>
<asp:TemplateField>
</Columns>
</asp:GridView>
然后在删除按钮单击事件中获取所选行ID:
protected void Btn_Click(object sender, EventArgs e)
{
int[] OrderIDList = new int[gvwID.Rows.Count];
int index = 0;
for (int count = 0; count < gvwID.Rows.Count; count++)
{
if (gvwID.Rows[count].FindControl("chkSelect") != null)
{
if (((CheckBox)gvwID.Rows[count].FindControl("chkSelect")).Checked)
{
if (gvwID.Rows[count].FindControl("HiddenField1") != null)
{
string OrderID = ((HiddenField)gvwID.Rows[count].FindControl("HiddenField1")).Value;
OrderIDList[index++] = Convret.ToInt32(OrderID);
}
}
}
}
然后从OrderIDList创建一个附加字符串并将其传递给存储过程。从存储过程使用附加的字符串创建一个xml。循环遍历xml并获取每个id并执行删除。
请参阅以下程序:
@IDList varchar(MAX)
DECLARE @xmlUserIDs xml
SELECT @xmlUserIDs = CONVERT(xml,'<root><cat>' + REPLACE(@IDList,',','</cat><cat>') + '</cat></root>')// creates xml from appended string
DELETE FROM
[TableName]
WHERE
[TableID] IN (SELECT
[Value] = T.C.value('.','int')
FROM
@xmlUserIDs.nodes('/root/cat') T(C));
希望这可以帮助你..
答案 1 :(得分:1)
protected void lnkbtnDelete_Click(object sender, EventArgs e)
{
int counter = 0;
List<string> words = new List<string>();
foreach (GridViewRow rowitem in grdlistWord.Rows)
{
if (((CheckBox)rowitem.Cells[0].FindControl("chkWord")).Checked == true)//i consider that the check box is in the first column index ---> 0
{
counter++;
words.Add(rowitem.Cells[1].Text); //i consider that the word is in the second column index ---> 1
}
}
/////////////////////////////////////////////////////////////
if(counter == 0) //no checks
{
//show some message box to clarify that no row has been selected.
}
/////////////////////////////////////////////////////////////
if (counter == 1) //one check
{
DeleteRecord(words[0]);
//Show some message box to clarify that the operation has been executed successfully.
}
/////////////////////////////////////////////////////////////
if (counter > 1) //more than one check
{
for(int i=0; i<words.Count;i++)
{
DeleteRecord(words[i]);
}
//Show some message box to clarify that the operation has been executed successfully.
}
grdlistWord.DataBind();
}