根据SQL结果验证GridView编辑行

时间:2016-09-06 20:20:37

标签: c# asp.net gridview

这里编码相当新。我有一个GridView,用户根据用户名TextBox输入人员。它使用方法GetUserInfo来执行SQL查询,并在用户创建或编辑行时自动填充其余的TextBox列。如果SQL没有找到任何行,我希望显示一条错误消息,并且GridView不接受该行。基本上在用户名字段验证。

我必须以编程方式完成所有工作(第三方WorkflowGen软件的约束)。我可以列出我尝试过的东西的详细信息,但我觉得我错过了最好的方法。如何混合Validator(如果我需要),SQL查询的结果,客户端“无效”消息,如果无效则拒绝行更新?我想,我对太多的活动部件和页面生命周期感到困惑。

<asp:GridView id="COLLAB_GRIDVIEW" showheader="True" showfooter="True" runat="server" autogeneratecolumns="false" onrowdatabound="GridView_RowDataBound">
<Columns><asp:TemplateField><EditItemTemplate><asp:TextBox autopostback="true" ontextchanged="GetUserInfo" value="" id="COLLAB_GRIDVIEW_INTERNET_ID" text="<%# Bind('COLLAB_GRIDVIEW_INTERNET_ID') %>" runat="server"></asp:TextBox></EditItemTemplate><ItemTemplate><asp:Label id="COLLAB_GRIDVIEW_INTERNET_ID" runat="server" text='<%# Eval("COLLAB_GRIDVIEW_INTERNET_ID") %>'></asp:Label></ItemTemplate></asp:TemplateField>
    <asp:TemplateField><EditItemTemplate><asp:TextBox id="COLLAB_GRIDVIEW_FIRST_NAME" text="<%# Bind('COLLAB_GRIDVIEW_FIRST_NAME') %>" runat="server"></asp:TextBox></EditItemTemplate><ItemTemplate><asp:Label id="COLLAB_GRIDVIEW_FIRST_NAME" runat="server" text='<%# Eval("COLLAB_GRIDVIEW_FIRST_NAME") %>'></asp:Label></ItemTemplate></asp:TemplateField>
    <asp:TemplateField><EditItemTemplate><asp:TextBox value="" id="COLLAB_GRIDVIEW_LAST_NAME" text="<%# Bind('COLLAB_GRIDVIEW_LAST_NAME') %>" runat="server"></asp:TextBox></EditItemTemplate><ItemTemplate><asp:Label id="COLLAB_GRIDVIEW_LAST_NAME" runat="server" text='<%# Eval("COLLAB_GRIDVIEW_LAST_NAME") %>'></asp:Label></ItemTemplate></asp:TemplateField>
    <asp:TemplateField><EditItemTemplate><asp:TextBox value="" id="COLLAB_GRIDVIEW_DEPT_NAME" text="<%# Bind('COLLAB_GRIDVIEW_DEPT_NAME') %>" runat="server"></asp:TextBox></EditItemTemplate><ItemTemplate><asp:Label id="COLLAB_GRIDVIEW_DEPT_NAME" runat="server" text='<%# Eval("COLLAB_GRIDVIEW_DEPT_NAME") %>'></asp:Label></ItemTemplate></asp:TemplateField>
    <asp:TemplateField><EditItemTemplate><asp:TextBox value="" id="COLLAB_GRIDVIEW_COLLEGE" text="<%# Bind('COLLAB_GRIDVIEW_COLLEGE') %>" runat="server"></asp:TextBox></EditItemTemplate><ItemTemplate><asp:Label id="COLLAB_GRIDVIEW_COLLEGE" runat="server" text='<%# Eval("COLLAB_GRIDVIEW_COLLEGE") %>'></asp:Label></ItemTemplate></asp:TemplateField>
    <asp:TemplateField><EditItemTemplate><asp:TextBox id="COLLAB_GRIDVIEW_CAMPUS" text="<%# Bind('COLLAB_GRIDVIEW_CAMPUS') %>" runat="server"></asp:TextBox></EditItemTemplate><ItemTemplate><asp:Label id="COLLAB_GRIDVIEW_CAMPUS" runat="server" text='<%# Eval("COLLAB_GRIDVIEW_CAMPUS") %>'></asp:Label></ItemTemplate></asp:TemplateField>
    <asp:CommandField buttontype="Button" showdeletebutton="True" showeditbutton="True" causesvalidation="False" insertvisible="False"></asp:CommandField>
</Columns>

private void GetCollabInfo(object sender, EventArgs e)
{
    TextBox sdr= (TextBox)sender;
    string internetid = sdr.Text.ToString();

    GridViewRow row = (GridViewRow)sdr.NamingContainer;
    int rowIndex = row.RowIndex;

    string conn = ConfigurationManager.ConnectionStrings["Datasource_IGM"].ConnectionString;
    string sql = "SELECT DISTINCT FIRST_NAME, LAST_NAME, PRIMARY_DEPTID_DESCR, UM_RRC_DESCR, CAMPUS_DESCR FROM IGM.PRIMARY_JOB_WITH_TENURE WHERE INTERNET_ID = '" + internetid + "'";

    DataTable dtDemo = SelectStatement(conn, sql);

    if (dtDemo != null && dtDemo.Rows.Count > 0)
    {
        ((TextBox)row.Cells[1].Controls[0]).Text = dtDemo.Rows[0]["FIRST_NAME"].ToString();
    // etc for the rest of the columns
    }
}

1 个答案:

答案 0 :(得分:0)

只需将GridView列的行为设置为必需即可。只要其中一个字段为空,就会自动生成错误消息并准备好触发。

您可以使用表单设计器中的行为功能设置它们。 或者通过修改动作参数&#34; FORM_FIELD_REQUIRED&#34;并添加所需GridView字段的ID。