установить флажок в gridview на основе значения данных - PullRequest
4 голосов
/ 22 июня 2011

У меня есть элемент управления gridview с полем флажка и несколькими связанными полями.Поле флажка не отображается непосредственно на поле в базе данных.Скорее, я хочу прочитать значение из поля в базе данных и «проверить» некоторые из флажков.

Например, учитывая следующие данные из базы данных -> datatable

        PROCESSED   NAME             DATE            
            Y       Mickey Mouse     11/15/2011
            N       Donald Duck      4/01/2012
            Y       James Bond       5/02/2011

Я бы хотел, чтобы в gridview отображался флажок и устанавливалось значение для полей UNCHECKED, где у PROCESSED = N и для PROCESSED = Y либо есть не редактируемый флажок, либо нет флажка вообще.gridview, SQL stmt запускается для базы данных, а результат SQL-запроса сохраняется в базе данных.Прежде чем связывать данные с видом сетки, я хотел бы проверить поле «обработано» и установить флажок на основе этого значения.

Вот элемент управления сеткой (сокращен для ясности):

<asp:GridView ID="gridview_all_applicants" runat="server" AllowPaging="True">
        <Columns>
          <asp:TemplateField HeaderText="Complete">
                <ItemTemplate>
                    <asp:CheckBox ID="process_flag" runat="server" />
                </ItemTemplate>
          </asp:TemplateField>
          <asp:BoundField DataField="lastname" HeaderText="Last Name" ReadOnly="True"  SortExpression="lastname" />

Вот что у меня есть в коде

 SqlCommand cmd = new SqlCommand(sql query here);
 SqlDataAdapter da = new SqlDataAdapter();
 DataTable dt = new DataTable();
 da.SelectCommand = cmd;
 // Save results of select statement into a datatable
 da.Fill(dt);
 foreach (DataRow r in dt.Rows)
 {
        // do some processing of data returned from query
        // read the char value from the returned data and set checkbox

             procflag = r["process_flag"].ToString().ToLower();
             CheckBox chkbox = new CheckBox();
             if (procflag == null || procflag == "n")
             {
                // SET CHECKBOX TO "NOT CHECKED"        

              }
              else
              {
                 // SET CHECKBOX TO "CHECKED" AND MAKE IT UNCLICKABLE
                 // ----OR---- DO NOT DISPLAY CHECKBOX AT ALL.

               }
     } // end for each


          gridview_all_applicants.DataSource = dt;
          gridview_all_applicants.DataBind(); 

. Любая помощь очень ценится.

Ответы [ 3 ]

9 голосов
/ 22 июня 2011

Вы можете сделать это так:

Сначала на сервере SQL:


SELECT 
    CAST(CASE PROCESSED WHEN 'Y' THEN 1 ELSE 0 END AS BIT) AS PROCESSED
    NAME
    DATE
FROM ExampleTable

в коде c #:


SqlCommand cmd = new SqlCommand(sql query here); 
SqlDataAdapter da = new SqlDataAdapter(); 
DataTable dt = new DataTable(); 
da.SelectCommand = cmd; 

// Save results of select statement into a datatable 
da.Fill(dt);

gridview_all_applicants.DataSource = dt;          
gridview_all_applicants.DataBind(); 

и, наконец, в aspx:

<asp:TemplateField HeaderText="Complete">
<ItemTemplate>
    <asp:CheckBox ID="process_flag" runat="server" Checked='<%# bool.Parse(Eval("PROCESSED").ToString()) %>' Enable='<%# !bool.Parse(Eval("PROCESSED").ToString()) %>'/>
</ItemTemplate>

3 голосов
/ 22 июня 2011

Как насчет решения, независимого от базы данных, только если вы используете базу данных, отличную от SQL Server;)

2 голосов
/ 24 апреля 2012
<asp:CheckBox ID="process_flag_check" runat="server" 
            Checked='<%# bool.Parse(Eval("process_flag").ToString() == "Y" ? "True": "False") %>'
            Enabled="false"/>

</asp:CheckBox>

Это отлично работает. Я модифицировал с помощью Кевина и Марко Кода.Спасибо Кевинву и Марко

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...