繁体   English   中英

如何通过 ASP 按钮从 Gridview 中的特定单元格中获取值? ASP.NET C#

[英]How do I grab values from specific cells in a Gridview via ASP Button ? ASP.NET C#

当我单击 ASP 按钮启动 function 时,它会遍历 gridview,但值是空字符串。 我要做的事情是允许我的用户通过“拖放”重新订购 gridview,然后将所有项目保存在 gridview 中的新顺序。 这是关键,当他们单击按钮时,我想遍历 Gridview 中的第一列,看看在重新排序方面是否有任何规则被破坏,如果没有规则被破坏...... sortOrder(隐藏列)将被更新。 然后新的重新排序和更新的 SortOrder 值将通过存储过程传回数据库表。

到目前为止,我正在单击按钮以通过嵌套 for 循环遍历 gridview 的第一列,并且在遍历时,没有拾取任何值。 它们都被视为空字符串。

这是 Gridview ASPX 代码:

  <asp:GridView ID="gridComments" runat="server" BackColor="White" BorderColor="#999999" DataKeyNames="RecNo" OnRowDeleting="gridComments_RowDelete" OnSelectedIndexChanged="gridComments_SelectedIndexChanged"
                        OnRowDataBound="gridComments_RowDataBound" OnRowUpdating="gridComments_RowUpdating" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" ForeColor="Black" GridLines="Vertical" AutoGenerateColumns="False" Width="90%">
                        <FooterStyle BackColor="#CCCCCC" />
                        <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
                        <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
                        <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
                        <AlternatingRowStyle BackColor="#CCCCCC" />
                        <Columns>
                            <asp:TemplateField HeaderText="Edit">
                                <ItemStyle Wrap="false" />
                                <ItemTemplate>
                                    <asp:LinkButton runat="server" ID="lnkEdit" CommandName="select" Text='<%# Eval("Program") %>' CausesValidation="false"></asp:LinkButton>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Description">
                                <ItemStyle Width="80%" HorizontalAlign="Left" />
                                <ItemTemplate>
                                    <asp:Label runat="server" ID="lblDescription" Text='<%# Eval("Preview") %>'></asp:Label>&nbsp;&nbsp;
                        <asp:LinkButton runat="server" ID="lnkEditComment" Text="Edit"></asp:LinkButton>
                                    <ajaxToolkit:ModalPopupExtender ID="modalPopup" runat="server" PopupControlID="pnlCommentInfo" TargetControlID="lnkEditComment" BackgroundCssClass="modalBackground" CancelControlID="btnCancel"></ajaxToolkit:ModalPopupExtender>
                                    <asp:Panel ID="pnlCommentInfo" runat="server" Style="display: none; text-align: left" CssClass="pnlPop" BorderStyle="Double" Width="500px" ScrollBars="Auto">
                                        <asp:Label runat="server" ID="lblCommentNumber"></asp:Label><br />
                                        <br />
                                        Comment:<br />
                                        <asp:TextBox ID="txtEditComment" runat="server" Rows="6" TextMode="MultiLine" Columns="58" /><br />
                                        <br />
                                        <asp:Button ID="btnSave" runat="server" Text="Save" CausesValidation="false" CommandName="Update" />
                                        <asp:Button ID="btnCancel" runat="server" Text="Cancel" CausesValidation="false" />
                                    </asp:Panel>
                                </ItemTemplate>
                            </asp:TemplateField>

                            <asp:TemplateField>
                                <ItemTemplate>
                                    <asp:LinkButton runat="server" ID="lnkDelete" CommandName="delete" Text="Delete"></asp:LinkButton>
                                </ItemTemplate>
                            </asp:TemplateField>

                            <asp:TemplateField >
                                <HeaderStyle  CssClass =" HiddenCol"/>
                                <ItemStyle CssClass ="HiddenCol" />
                                <ItemTemplate >
                                     <%# Eval("SortOrder") %>

                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView> 

<div style="clear:both">
                        <asp:Button ID="HiddenButton" runat="server" Text="" style="display:none"  BackColor="Transparent" Width="30px"/>
                        <asp:Button ID="Button1" runat="server" OnClick="SaveReorder_Click" Text="Save Ordering Changes" />


                    </div>

                     <asp:Panel ID="StatusPanel" runat="server" CssClass="modalPopup"  Height="123px" Width="292px" style="display:none">
                <div style="text-align: center">
                 <p> ERROR: Please place comments by program in numerical order from least to greatest. Please try again.

                 </p>
            <div style="text-align: center; height: 21px"  >
                    <input id="OK" type="button" value="OK" />
                </div>

                   </div>
        </asp:Panel>

                    <ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender1" runat="server" BackgroundCssClass="modalBackground" PopupControlID="StatusPanel" OkControlID="OK"  CancelControlID="OK"  TargetControlID="HiddenButton">

                 </ajaxToolkit:ModalPopupExtender>
                </div>

这是我在代码隐藏文件中创建的 Function:

我只是在这一步,如果他们对数据重新排序错误,则会出现一个弹出窗口。 如果他们正确执行,则可以在更新 SortOrder 列(隐藏列)后将更新保存到数据库中

protected void SaveReorder_Click(object sender, EventArgs e)
    {



        for (int i = 0; i < gridComments.Rows.Count -1; i++ )
        {
               for(int j = i+1; j < gridComments.Columns.Count ; j++)
               {

                   //if (Convert.ToInt32(gridComments.Rows[i].Cells[0].Text) > Convert.ToInt32(gridComments.Rows[j].Cells[0].Text))
                   if (Convert.ToInt32(gridComments.Rows[i].Cells[0].Text) > Convert.ToInt32(gridComments.Rows[j].Cells[0].Text))
                   {
                       ModalPopupExtender1.Show();
                   }

               }
        }


    }```

如果您尝试访问该行的第一个单元格,我认为您不会基于Text返回任何内容,因为第一列呈现一个控件。 也就是说,除非您的OnRowDataBound中有更多内容可以更简单地填充第一列。

如果你看这里: https://stackoverflow.com/a/13795757/2951086他们正在考虑提取列的值,并且在尝试使用TemplateField通过其列的Cell.Text访问它时遇到问题。 链接的答案建议在单元格中找到控件,如下所示以访问 Text 属性(如果您尝试使用第一列的 LinkButton 的 Text 字段,则更改为匹配):

    LinkButton lb = (LinkButton)gridComments.Rows[i].Cells[0].FindControl("lnkEdit");
    // use lb.Text as you see fit

此外,我不确定它是否重要,但看起来您正在使用j的列数来迭代一系列行,这似乎是有问题的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM