GridView行命令错误

时间:2014-09-08 13:32:24

标签: c# asp.net gridview

我有一个GridView设置,实体框架有两个TemplateFields,每个TemplateFields调用一个弹出窗口,只显示数据库中的文本。 ImageButtons都设置为<asp:GridView ID="grvResults" runat="server" DataKeyNames="Soln_SolutionId" OnRowCommand="grvResults_RowCommand" CssClass="dgstyle" /> <Columns> <asp:TemplateField HeaderText=""> <ItemTemplate> <asp:ImageButton ID="imgPreview" runat="server" CommandName="viewDoc" CommandArgument='<%#Eval("Link")%>' ImageUrl="~/images/viewpage.gif" ImageAlign="Left" Width="25" Height="25" ToolTip="View attachment" AlternateText='<%#Eval("Link")%>' /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText=""> <ItemTemplate> <asp:ImageButton ID="imgDetail" runat="server" CommandName="viewDetail" CommandArgument='<%#Eval("Soln_SolutionId")%>' ImageUrl="~/images/docview.gif" ImageAlign="Left" Width="25" Height="25" ToolTip="View details about the page" AlternateText="View details" /></ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>

protected void grvResults_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int DetailID = Convert.ToInt32(e.CommandArgument.ToString());
            using (VIPCRMEntities dbc = new VIPCRMEntities())
            {
                Solution selDetail = (from c in dbc.Solutions
                                      where c.Soln_SolutionId == DetailID
                                      select c).First();
                if (e.CommandName == "viewDetail")
                {
                    InfoModal.Show();
                    lblInfoText.Text = selDetail.Soln_SolutionDetails;
                }
                else if (e.CommandName == "viewDoc")
                {
                    InfoModal.Show();
                    lblInfoText.Text = selDetail.soln_link;
                }
            }
        }

背后的代码(C#)

{{1}}

如果我点击&#34; viewDetails&#34;图像,它完美地运作。 如果我点击&#34; viewDoc&#34;它失败,但出现以下异常:

输入字符串的格式不正确。   描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

  

异常详细信息:System.FormatException:输入字符串不在   格式正确。

     

来源错误:

     

第151行:int DetailID =   Convert.ToInt32(e.CommandArgument.ToString());

现在有人为什么会这样,以及如何修复它?

3 个答案:

答案 0 :(得分:0)

  

异常详细信息:System.FormatException:输入字符串的格式不正确。

此错误表明该值为null或非nummeric。连接调试器,检查您正在接收的值

答案 1 :(得分:0)

您应该更改以下代码

int DetailID;
int.TryParse(e.CommandArgument.ToString(), out DetailID);

更多参考此链接: int index = Convert.ToInt32(e.CommandArgument.ToString()); is not working

答案 2 :(得分:0)

这是我的Row Command上的逻辑错误。实体模型不喜欢在Gridview Row Command中使用共享变量的整个想法。我还在读这篇文章。

但这是有效的代码。

if (e.CommandName == "viewDetail")
            {
                int DetailID = Convert.ToInt32(e.CommandArgument.ToString());
                using (VIPCRMEntities dbc = new VIPCRMEntities())
                {
                    Solution selDetail = (from c in dbc.Solutions
                                          where c.Soln_SolutionId == DetailID
                                          select c).First();
                    InfoModal.Show();
                    lblInfoText.Text = selDetail.Soln_SolutionDetails;
                }
            }
            else if (e.CommandName == "viewDoc")
            {
                int DetailID = Convert.ToInt32(e.CommandArgument.ToString());
                using (VIPCRMEntities dbc = new VIPCRMEntities())
                {
                    Solution selDetail = (from c in dbc.Solutions
                                          where c.Soln_SolutionId == DetailID
                                          select c).First();
                    InfoModal.Show();
                    lblInfoText.Text = selDetail.soln_link;
                }               
            }