CSharp - 在,中,如何检查 CheckBoxField?

  显示原文与译文双语对照的内容
0 0

我有一个GridView的webform 。 在这里GridView中,我有一个数据绑定 CheckBoxField 。 我还有一个数据绑定字段,它是编辑,带有一个 statuscode 。

我想要实现的是:

如果用户编辑是一行,并且检查复选框,statuscode需要有一个新的值分配,如果用户忘记更新 statuscode,也需要一个新的值。

ASP.Net:


<asp:GridView ID="gvRestordrer" runat="server" DataSourceID="basketConn2" AutoGenerateColumns="False" DataKeyNames="k_ordre_id" CssClass="gvBasket" GridLines="None" Width="706px" AllowPaging="true" PageSize="10" OnRowEditing="getOrderDetails" OnRowCancelingEdit="clearOrderDetails" OnRowUpdating="clearOrderDetails">
 <RowStyle CssClass="gvRow"/>
 <Columns>
. . .
//BoundField with statuscode. This value need to be updated on rowupdating, if Checkboxfield has been checked by the user
 <asp:BoundField DataField="k_order_statuscode" HeaderText="Statuscode" SortExpression="k_order_statuscode"> 
 <HeaderStyle CssClass="gvHeader"/>
 </asp:BoundField>
//Checkboxfield bound to a database bool"k_order_completed"
 <asp:CheckBoxField DataField="k_order_completed" HeaderText="Completed?" SortExpression="k_order_completed"> 
 <HeaderStyle CssClass="gvHeader"/>
 </asp:CheckBoxField>
//Commandfield
 <asp:CommandField DeleteText="" EditText="Handle Order" ShowDeleteButton="True" ShowEditButton="True" UpdateText="Update Order"> 
 <HeaderStyle CssClass="gvHeader"/>
 </asp:CommandField>
...
</asp:GridView>

C# 内容:


protected void clearOrderDetails(object sender, GridViewUpdateEventArgs e)
 {
 lblOrdreDetaljer.Text ="";
 int index = Convert.ToInt32(e.RowIndex);

//Not working
 if (gvRestordrer.Rows[index].Cells[4].Value == true)
 {
 basketConn2.UpdateParameters["k_order_statuscode"].DefaultValue ="4";
 }
 }

除了创建TemplateField并在这里使用复选框之外,还有其他解决方案? 我想有一个更简单的方法,但谷歌没有提供给我答案。

任何帮助将不胜感激。

时间: 原作者:

0 0

这对于数据绑定复选框无效,但这里是我为gridview中的复选框做的。

到目前为止,我可以通过以下方式获得选中的项目:

将复选框添加到 gridview:


 internal static void AddCheckboxes(System.Web.UI.WebControls.GridView gv,IEnumerable<int> checkedRows)
 {
 foreach (var item in gv.Rows.Cast<System.Web.UI.WebControls.GridViewRow>().Select(c => c.Cells[0]).Where(cell => cell.Controls.Count == 0).WithIndex())
 item.Item1.Controls.Add(new System.Web.UI.WebControls.CheckBox() { ClientIDMode = System.Web.UI.ClientIDMode.Static, ID ="ckUpdate" + item.Item2, Checked = checkedRows!= null && checkedRows.Contains(item.Item2) });
 }

然后在 postback 中


 internal static IEnumerable<int> GetCheckedRows(IEnumerable<string> paramKeys)
 {
 return paramKeys
. Where(f => f.Contains("$"))
. Where(f => System.Text.RegularExpressions.Regex.IsMatch(f,"ckUpdate[0-9]+$"))
. Select(p => int.Parse(System.Text.RegularExpressions.Regex.Match(p,"[0-9]+$").Value));

 }

然后调用


 GetCheckedRows(Request.Params.AllKeys).ToList();


helper:


public static IEnumerable<Tuple<T, int>> WithIndex<T>(this IEnumerable<T> enumerable)
 {
 return enumerable.Select((item, index) => Tuple.Create(item, index));
 }

原作者:
...