这里编码相当新。我有一个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
}
}
答案 0 :(得分:0)
只需将GridView列的行为设置为必需即可。只要其中一个字段为空,就会自动生成错误消息并准备好触发。
您可以使用表单设计器中的行为功能设置它们。 或者通过修改动作参数&#34; FORM_FIELD_REQUIRED&#34;并添加所需GridView字段的ID。