C#怎么实现下拉框动态绑定数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#怎么实现下拉框动态绑定数据相关的知识,希望对你有一定的参考价值。

如题,做查询功能,需要按年度查询,有两个下拉框,第一个下拉框是查询的起始年份,第二个下拉框是截止年份,其最大值只能取到当前年份,查询结果是在这两个年份之间所有满足条件的数据。请问该怎么动态绑定这两个下拉框,忘高手指点

1、首先,新建一个Winform窗体应用程序,然后在界面上,放置一个下拉框。

2、在CS类里面编辑代码,为下拉框绑定值,用来显示效果,为了直观,尽量把数据放多一些,如下所示。

3、回到form界面,选中下拉框,在属性面板中,选择属性DropDownHeight,这个属性就是这只下拉框的高度的属性。

4、首先,设置下拉框的高度为200,然后,我们调试程序,看看显示效果。

5、然后,关闭界面,把这个属性的值设置为100。

6、设置完毕后,再重启下看看效果,这是界面显示如下。

参考技术A

两种方法:

1. 绑定数据源:

comboBox1.DataSource=ds.Tables[0];
comboBox1.DisplayMenber="字段名";
comboBox1.Text="初始化值";

2. 添加删除记录方法:

//添加
for(int i=0;i<list.Count;i++)

   comboBox1.Items.Add(list[i]);
 
//删除
comboBox1.Items.RemoveAt(Index);

参考技术B 我理解的比较简单:是不是说从一个表里根据时间查询一个时间段里的数据,而截止时间不能超过当前时间,是不是这个意思追问

嗯,就是这个意思。

追答

可以循环年份到当前年份终止,保存到list再绑定到dropdownlist里,
for(int i =1900;i<当前年份,i++)
当前年份:DateTime.Now.ToString("yyyy")

追问

嗯,想法应该可行,可以给出简单代码不能,怎么绑定。

追答

IList years = new List();
int nowYear = Convert.ToInt32(DateTime.Now.ToString("yyyy"));
for (int i = 1900; i < nowYear; i++)

years.Add(i);


if (years != null)

this.DropDownList1.DataSource = years;
this.DropDownList1.DataBind();

参考技术C 直接让人家输入年份比选择可能还方便点 参考技术D 用第一个下拉框DropDownList1的SelectedIndexChanged事件绑定第二个下拉框的数据

Djago - Form组件动态绑定数据

Form组件动态绑定数据

一、概述(以单选下拉框为例)

用Form组件生成下拉框时,通常下拉框内的数据从数据库中获取。当在数据库中更新或者添加数据时,发现在刷新浏览器页面时,下拉框内的数据无变化。需要重新启动django在实际中这是不合理的

# views.py
class Test2Form(forms.Form):
    user = fields.ChoiceField(choices=models.UserInfo.objects.values_list('id','username'))
    
def test2(request):
    obj = Test2Form()
    return render(request,'test2.html',"obj":obj)
    
# 数据库
id  username   email
1    小白      1212@qq.com
2    小花      12@qq.com

# html
<span>姑娘: obj.user </span>

二、分析

step1:django启动时,class类就会运行,下拉框中获取数据库中的数据
step2:添加或修改数据库中的数据,刷新浏览器页面。下拉框中的数据不随着更新
step3:因为在刷新页面时,class中的类属性并不会再重新生成,所以一直保留最开始的数据

三、解决方法一

推荐使用:在类中重写__init__()方法,在页面刷新实例会对象时,执行方法更新数据

class Test2Form(forms.Form):
    user = fields.ChoiceField()
    
    # 在类中定义__init__()函数
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        
        # self.fields必须写在super()下面。因为super会将类属性全拷贝,self.filelds才能取到值
        self.fields['user'].choices=models.UserInfo.objects.values_list('id','username')
def test2(request):
    obj = Test2Form()
    return render(request,'test2.html',"obj":obj)

四、解决方法二

使用django自带的ModelChoiceField字段生成下拉框。看起来似乎比方法一简单,但是不推荐使用。因为需要在models中写str方法。如果在另一个的下拉框中要显示别的字段就不好操作了,与models耦合度高

from django.forms.models import ModelChoiceField  # 需要导入
class Test2Form(forms.Form):
    user = ModelChoiceField(queryset=models.UserInfo.objects.all(),to_field_name='username')
    '''
        queryset,                  # 查询数据库中的数据
        empty_label="---------",   # 默认空显示内容
        to_field_name=None,        # HTML中option中value的值对应的字段
     '''
在浏览器页面下拉框中显示 '表名 object' ,所以还需要修改model.py文件
# models.py
class UserInfo(models.Model):
    username=models.CharField(max_length=32)
    email=models.EmailField(max_length=32)

    def __str__(self):
        return self.username

以上是关于C#怎么实现下拉框动态绑定数据的主要内容,如果未能解决你的问题,请参考以下文章

谁知道怎么用ajax实现选择下拉框的时候动态从数据库读取数据吗

Djago - Form组件动态绑定数据

在 Asp.net C# 中创建动态控件,并缓存控件并绑定数据

ComboBox 如何动态赋值 C#

wpf下拉框 绑定怎么让他默认有选中项

Djago - Form组件动态绑定数据