2016-09-06 10 views
0

ここでコーディングするのがかなり新しいです。私はユーザがユーザ名TextBoxに基づいてスタッフを入力するGridViewを持っています。ユーザーが行を作成または編集するときに、GetUserInfoメソッドを使用してSQLクエリを実行し、残りのTextBox列を自動入力します。 SQLで行が見つからない場合は、エラーメッセージが表示され、GridViewが行を受け入れないようにします。基本的にユーザー名フィールドの検証。GridViewのSQL結果に基づいた行の編集

プログラムですべてを実行する必要があります(第三者WorkflowGenソフトウェアの制約)。私が試した厄介なものの詳細を列挙することができますが、私はここで最善の方法を逃しているように感じます。バリデータ(必要な場合)、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

単に必要へのGridViewの列の行動を設定します。エラーメッセージは自動的に生成され、フィールドの1つが空の場合にトリガーされる準備が整います。

の動作の機能をフォームデザイナーで使用して設定できます。 アクションパラメータ "FORM_FIELD_REQUIRED"を変更し、必要なGridViewフィールドのIDを追加します。

関連する問題